Java SE 7 {finally}  2011-08-18Andreas Enbohm
19 augusti 2011Sida 2Java SE 7A evolutionaryevolement of Java6 yearssince last updateSomethingsleftout, will briefly discuss this at the endOracle reallypushing Java forward- a lotpolitical problems with Sun made Java 7 postphonedseveraltimesJava still growing (1.42%), #1 mostusedlanguageaccording to TIOBE with 19.4% (Aug 2011)My top 10 new features (not ordered in anyway)
Java SE 7 – Language ChangesNumber 1:Try-with-resources Statement (or ARM-blocks)Before :19 augusti 2011Sida 3static String readFirstLineFromFileWithFinallyBlock(String path)   throwsIOException {BufferedReaderbr = new BufferedReader(new FileReader(path));  try {returnbr.readLine();  } finally {if (br != null) {        try {br.close();        } catch (IOExceptionignore){         //donothing        }    }  }}
Java SE 7 – Language ChangesNumber 1:Try-with-resources Statement (or ARM-blocks)With Java 7:19 augusti 2011Sida 4static String readFirstLineFromFile(String path) throws IOException {     try (BufferedReaderbr = new BufferedReader(new FileReader(path))) {           return br.readLine();     } }
Java SE 7 – Language ChangesNumber 1 - NOTE:The try-with-resources statement is a try statement that declares one or more resources. A resource is as an object that must be closed after the program is finished with it. The try-with-resources statement ensures that each resource is closed at the end of the statement. Any object that implements java.lang.AutoCloseable, which includes all objects which implement java.io.Closeable, can be used as a resource.19 augusti 2011Sida 5
Java SE 7 – Language ChangesNumber 2: 	Strings in switch Statements19 augusti 2011Sida 6public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {     String typeOfDay;     switch (dayOfWeekArg) {         case "Monday":typeOfDay = "Start of work week";             break;         case "Tuesday":         case "Wednesday":         case "Thursday":typeOfDay = "Midweek";             break;         case "Friday":typeOfDay = "End of work week";             break;         case "Saturday":         case "Sunday":typeOfDay = "Weekend";             break;         default:             throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);     }     return typeOfDay;}
Java SE 7 – Language ChangesNumber 2 - NOTE:The Java compiler generates generally more efficient bytecode from switch statements that use String objects than from chained if-then-else statements.19 augusti 2011Sida 7
Java SE 7 – Language ChangesNumber 3:Catching Multiple ExceptionTypesBefore : Difficult to eliminatecodeduplicationdue to different exceptions!19 augusti 2011Sida 8try {   …} catch (IOException ex) { logger.log(ex); throw ex; } catch (SQLException ex) { logger.log(ex); throw ex; }
Java SE 7 – Language ChangesNumber 3:Catching Multiple ExceptionTypesWith Java 7 :19 augusti 2011Sida 9try {   …} catch (IOException|SQLException ex) { logger.log(ex); throw ex; }
Java SE 7 – Language ChangesNumber 3 - NOTE:Catching Multiple ExceptionTypesBytecode generated by compiling a catch block that handles multiple exception types will be smaller (and thus superior) than compiling many catch blocks that handle only one exception type each.  19 augusti 2011Sida 10
Java SE 7 – Language ChangesNumber 4:TypeInference for GenericInstance CreationBefore: Howmanytimeshave you swornabout this duplicatedcode? 19 augusti 2011Sida 11Map<String, List<String>> myMap = new HashMap<String, List<String>>();
Java SE 7 – Language ChangesNumber 4:TypeInference for GenericInstance CreationWith Java 7: 19 augusti 2011Sida 12Map<String, List<String>> myMap = new HashMap<>();
Java SE 7 – Language ChangesNumber 4 - NOTE:TypeInference for GenericInstance CreationWriting new HashMap() (withoutdiamond operator) will still use the rawtype of HashMap (compilerwarning)19 augusti 2011Sida 13
Java SE 7 – Language ChangesNumber 5:Underscores in NumericLiterals19 augusti 2011Sida 14longcreditCardNumber = 1234_5678_9012_3456L; longsocialSecurityNumber = 1977_05_18_3312L; float pi = 3.14_15F; longhexBytes = 0xFF_EC_DE_5E; longhexWords = 0xCAFE_BABE; longmaxLong = 0x7fff_ffff_ffff_ffffL;  long bytes = 0b11010010_01101001_10010100_10010010;
Java SE 7 – Language ChangesNumber 5 - NOTE:Underscores in NumericLiteralsYou can place underscores only between digits; you cannot place underscores in the following places:At the beginning or end of a numberAdjacent to a decimal point in a floating point literalPrior to an F or L suffix In positions where a string of digits is expected19 augusti 2011Sida 15
Java SE 7 – ConcurrentUtilitiesNumber 6:Fork/JoinFramework (JSR 166)” a lightweightfork/joinframework with flexible and reusablesynchronizationbarriers, transfer queues, concurrent linked double-endedqueues, and thread-localpseudo-random-number generators.”19 augusti 2011Sida 16
Java SE 7 – ConcurrentUtilitiesNumber 6:Fork/JoinFramework (JSR 166)19 augusti 2011Sida 17if (my portion of the work is small enough) 	do the work directly else 	split my work into two pieces invoke the two pieces and       	wait for the results
Java SE 7 – ConcurrentUtilitiesNumber 6:Fork/JoinFramework (JSR 166)19 augusti 2011Sida 18
Java SE 7 – ConcurrentUtilitiesNumber 6:Fork/JoinFramework (JSR 166)New ClassesForkJoinTask
RecursiveTask
RecursiveAction
ThreadLocalRandom
ForkJoinPool19 augusti 2011Sida 19
Java SE 7 – Filesystem APINumber 7: 	NIO 2 Filesystem API (Non-Blocking I/O)Bettersupports for accessingfile systems such and support for customfile systems (e.g. cloudfile systems)Access to metadata such as file permissionsMoreeffecient support whencopy/movingfilesEnchancedExceptionswhenworking on files, i.e. file.delete() nowthrowsIOException (not just Exception)19 augusti 2011Sida 20
Java SE 7 – JVM EnhancementNumber 8:InvokeDynamic (JSR292)Support for dynamiclanguages so theirperformance levels is near to that of the Java language itselfAt byte code level this means a new operand (instruction) called invokedynamicMake is possible to do efficient method invocation for dynamic languages (such as JRuby) instead of statically (like Java) .Huge performance gain 19 augusti 2011Sida 21
Java SE 7 – JVM EnhancementNumber 9: 	G1 and JVM optimizationG1 morepredictable and uses multiple coresbetterthan CMSTiered Compilation –Bothclient and server JIT compilers are usedduringstarupNUMA optimization - Parallel Scavenger garbage collector has been extended to take advantage of machines with NUMA (~35% performance gain)EscapeAnalysis - analyze the scope of a new object's and decide whether to allocate it on the Java heap19 augusti 2011Sida 22
Java SE 7 – JVM EnhancementNumber 9:EscapeAnalysis19 augusti 2011Sida 23public class Person {     private String name; private int age;     public Person(String personName, intpersonAge) { name = personName; age = personAge; }        public Person(Person p) {            this(p.getName(), p.getAge());        }} public classEmployee {     private Person person; // makes a defensive copy to protectagainstmodifications by caller    public Person getPerson() {    return new Person(person)     }; public voidprintEmployeeDetail(Employeeemp) {     Person person = emp.getPerson(); // this callerdoes not modify the object, so defensive copywasunnecessarySystem.out.println ("Employee'sname: " + person.getName() + "; age: " + person.getAge()); } }
Java SE 7 - NetworkingNumber 10: 	Support for SDP SocketDirectProtocol  (SDP) enablesJVMs to use Remote Direct Memory Access (RDMA). RDMA enables moving data directly from the memory of one computer to another computer, bypassing the operating system of both computers and resulting in significant performance gains. The result is High throughput and Low latency (minimal delay between processing input and providing output) such as you would expect in a real-time application. 19 augusti 2011Sida 24

Java7 - Top 10 Features

  • 1.
    Java SE 7{finally} 2011-08-18Andreas Enbohm
  • 2.
    19 augusti 2011Sida2Java SE 7A evolutionaryevolement of Java6 yearssince last updateSomethingsleftout, will briefly discuss this at the endOracle reallypushing Java forward- a lotpolitical problems with Sun made Java 7 postphonedseveraltimesJava still growing (1.42%), #1 mostusedlanguageaccording to TIOBE with 19.4% (Aug 2011)My top 10 new features (not ordered in anyway)
  • 3.
    Java SE 7– Language ChangesNumber 1:Try-with-resources Statement (or ARM-blocks)Before :19 augusti 2011Sida 3static String readFirstLineFromFileWithFinallyBlock(String path) throwsIOException {BufferedReaderbr = new BufferedReader(new FileReader(path)); try {returnbr.readLine(); } finally {if (br != null) { try {br.close(); } catch (IOExceptionignore){ //donothing } } }}
  • 4.
    Java SE 7– Language ChangesNumber 1:Try-with-resources Statement (or ARM-blocks)With Java 7:19 augusti 2011Sida 4static String readFirstLineFromFile(String path) throws IOException { try (BufferedReaderbr = new BufferedReader(new FileReader(path))) { return br.readLine(); } }
  • 5.
    Java SE 7– Language ChangesNumber 1 - NOTE:The try-with-resources statement is a try statement that declares one or more resources. A resource is as an object that must be closed after the program is finished with it. The try-with-resources statement ensures that each resource is closed at the end of the statement. Any object that implements java.lang.AutoCloseable, which includes all objects which implement java.io.Closeable, can be used as a resource.19 augusti 2011Sida 5
  • 6.
    Java SE 7– Language ChangesNumber 2: Strings in switch Statements19 augusti 2011Sida 6public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) { String typeOfDay; switch (dayOfWeekArg) { case "Monday":typeOfDay = "Start of work week"; break; case "Tuesday": case "Wednesday": case "Thursday":typeOfDay = "Midweek"; break; case "Friday":typeOfDay = "End of work week"; break; case "Saturday": case "Sunday":typeOfDay = "Weekend"; break; default: throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg); } return typeOfDay;}
  • 7.
    Java SE 7– Language ChangesNumber 2 - NOTE:The Java compiler generates generally more efficient bytecode from switch statements that use String objects than from chained if-then-else statements.19 augusti 2011Sida 7
  • 8.
    Java SE 7– Language ChangesNumber 3:Catching Multiple ExceptionTypesBefore : Difficult to eliminatecodeduplicationdue to different exceptions!19 augusti 2011Sida 8try { …} catch (IOException ex) { logger.log(ex); throw ex; } catch (SQLException ex) { logger.log(ex); throw ex; }
  • 9.
    Java SE 7– Language ChangesNumber 3:Catching Multiple ExceptionTypesWith Java 7 :19 augusti 2011Sida 9try { …} catch (IOException|SQLException ex) { logger.log(ex); throw ex; }
  • 10.
    Java SE 7– Language ChangesNumber 3 - NOTE:Catching Multiple ExceptionTypesBytecode generated by compiling a catch block that handles multiple exception types will be smaller (and thus superior) than compiling many catch blocks that handle only one exception type each. 19 augusti 2011Sida 10
  • 11.
    Java SE 7– Language ChangesNumber 4:TypeInference for GenericInstance CreationBefore: Howmanytimeshave you swornabout this duplicatedcode? 19 augusti 2011Sida 11Map<String, List<String>> myMap = new HashMap<String, List<String>>();
  • 12.
    Java SE 7– Language ChangesNumber 4:TypeInference for GenericInstance CreationWith Java 7: 19 augusti 2011Sida 12Map<String, List<String>> myMap = new HashMap<>();
  • 13.
    Java SE 7– Language ChangesNumber 4 - NOTE:TypeInference for GenericInstance CreationWriting new HashMap() (withoutdiamond operator) will still use the rawtype of HashMap (compilerwarning)19 augusti 2011Sida 13
  • 14.
    Java SE 7– Language ChangesNumber 5:Underscores in NumericLiterals19 augusti 2011Sida 14longcreditCardNumber = 1234_5678_9012_3456L; longsocialSecurityNumber = 1977_05_18_3312L; float pi = 3.14_15F; longhexBytes = 0xFF_EC_DE_5E; longhexWords = 0xCAFE_BABE; longmaxLong = 0x7fff_ffff_ffff_ffffL; long bytes = 0b11010010_01101001_10010100_10010010;
  • 15.
    Java SE 7– Language ChangesNumber 5 - NOTE:Underscores in NumericLiteralsYou can place underscores only between digits; you cannot place underscores in the following places:At the beginning or end of a numberAdjacent to a decimal point in a floating point literalPrior to an F or L suffix In positions where a string of digits is expected19 augusti 2011Sida 15
  • 16.
    Java SE 7– ConcurrentUtilitiesNumber 6:Fork/JoinFramework (JSR 166)” a lightweightfork/joinframework with flexible and reusablesynchronizationbarriers, transfer queues, concurrent linked double-endedqueues, and thread-localpseudo-random-number generators.”19 augusti 2011Sida 16
  • 17.
    Java SE 7– ConcurrentUtilitiesNumber 6:Fork/JoinFramework (JSR 166)19 augusti 2011Sida 17if (my portion of the work is small enough) do the work directly else split my work into two pieces invoke the two pieces and wait for the results
  • 18.
    Java SE 7– ConcurrentUtilitiesNumber 6:Fork/JoinFramework (JSR 166)19 augusti 2011Sida 18
  • 19.
    Java SE 7– ConcurrentUtilitiesNumber 6:Fork/JoinFramework (JSR 166)New ClassesForkJoinTask
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
    Java SE 7– Filesystem APINumber 7: NIO 2 Filesystem API (Non-Blocking I/O)Bettersupports for accessingfile systems such and support for customfile systems (e.g. cloudfile systems)Access to metadata such as file permissionsMoreeffecient support whencopy/movingfilesEnchancedExceptionswhenworking on files, i.e. file.delete() nowthrowsIOException (not just Exception)19 augusti 2011Sida 20
  • 25.
    Java SE 7– JVM EnhancementNumber 8:InvokeDynamic (JSR292)Support for dynamiclanguages so theirperformance levels is near to that of the Java language itselfAt byte code level this means a new operand (instruction) called invokedynamicMake is possible to do efficient method invocation for dynamic languages (such as JRuby) instead of statically (like Java) .Huge performance gain 19 augusti 2011Sida 21
  • 26.
    Java SE 7– JVM EnhancementNumber 9: G1 and JVM optimizationG1 morepredictable and uses multiple coresbetterthan CMSTiered Compilation –Bothclient and server JIT compilers are usedduringstarupNUMA optimization - Parallel Scavenger garbage collector has been extended to take advantage of machines with NUMA (~35% performance gain)EscapeAnalysis - analyze the scope of a new object's and decide whether to allocate it on the Java heap19 augusti 2011Sida 22
  • 27.
    Java SE 7– JVM EnhancementNumber 9:EscapeAnalysis19 augusti 2011Sida 23public class Person { private String name; private int age; public Person(String personName, intpersonAge) { name = personName; age = personAge; } public Person(Person p) { this(p.getName(), p.getAge()); }} public classEmployee { private Person person; // makes a defensive copy to protectagainstmodifications by caller public Person getPerson() { return new Person(person) }; public voidprintEmployeeDetail(Employeeemp) { Person person = emp.getPerson(); // this callerdoes not modify the object, so defensive copywasunnecessarySystem.out.println ("Employee'sname: " + person.getName() + "; age: " + person.getAge()); } }
  • 28.
    Java SE 7- NetworkingNumber 10: Support for SDP SocketDirectProtocol (SDP) enablesJVMs to use Remote Direct Memory Access (RDMA). RDMA enables moving data directly from the memory of one computer to another computer, bypassing the operating system of both computers and resulting in significant performance gains. The result is High throughput and Low latency (minimal delay between processing input and providing output) such as you would expect in a real-time application. 19 augusti 2011Sida 24