This document provides an overview of new features and changes in Java 7, including improved support for dynamic languages through the invokedynamic instruction, string switching, try-with-resources, and minor language and API improvements. It also outlines two potential plans for future Java releases, with Plan A representing Java 7 as currently planned and Plan B splitting features between Java 7 and 8 to accelerate delivery.
4. Plans
Plan A
JDK 7
As currently planned
Mid 2012
5. Plans
Plan A Plan B
JDK7 JDK8
JDK 7 minus Lambda,
Lambda, Jigsaw,
As currently planned Jigsaw, and part of
and rest of Coin
Coin
Mid 2012 Mid 2011 End 2012
7. Dynamic Language
Support
JVM has no support for dynamic
languages:
• Existing JVM instruction set is
statically typed
• Limited support for dynamically
modifying existing classes and
methods
8. Dynamic Language
Support
Java 7 adds:
• a new invokedynamic instruction at the
JVM level
• ability to change classes and
methods at runtime dynamically in a
production environment.
9. Other Platform
Features
• JVM performance enhancements
• Upgrade class-loader architecture
• Garbage-First Collector
• New JavaDoc layout
12. NIO.2
• The FileVisitor API
• Directory watching
• File attributes
• Custom filesystem providers (ZIP)
13. Other API Features
• Updated XML stacks
• JDBC 4.1
• MethodHandles
• Unicode 6.0 and Locale enhancements
• Elliptic-curve cryptography
• Enhanced MBeans
18. Precise rethrow
public void preciseRethrow() throws IOException {
try {
new SimpleDateFormat("yyyyMMdd").parse("foo");
new FileReader("file.txt").read();
} catch(ParseException e) {
System.out.println(e.getMessage());
} catch(Exception e) {
System.out.println(e.getMessage());
throw e;
}
}
19. “Diamond”
/* Java 5 & 6 */
Map<String, List<String>> myMap = new HashMap<String,
List<String>>();
/* Java 7 */
Map<String, List<String>> myMap = new HashMap<>();
/* Be warned, the compiler still generates an unchecked
conversion warning! */
Map<String, List<String>> myMap = new HashMap();
20. Try-with-resources
File file = new File("input.txt");
try (InputStream is = new FileInputStream(file)) {
// do something with this input stream
} catch (FileNotFoundException ex) {
System.err.println(file.getAbsolutePath());
}
22. IMDb
We’re building an application which
reads IMDb data and parses it to
determine which actor has made the
best films.
23. Read files
• Open project SequentialWithoutIO
• Update root field in class IMDB
• Find method readFilms() and
readActors() in class IMDB
• Implement!
24. NIO.2 Hints
/** Read a UTF-16 file like ratings-clean.txt **/
try (BufferedReader reader = Files.newBufferedReader(
file, Charset.forName(“UTF-16”)))
/** Read all actor files in a directory **/
try (DirectoryStream<Path> stream =
Files.newDirectoryStream(dir, “actor*.txt”))
/** Read all lines in file **/
Files.readAllLines(entry, Charset.forName(“UTF-8”));
25. Parse files
• Open project SequentialParserWithIO
(or continue with your previous project)
• Update root field in class IMDB
• Find method compute() in classes
ActorParseTask and FilmParseTask
• Implement!
26. Fork/Join Hints
/** Start computing with checking if the work is small
enough to do sequentially **/
/** Fork! **/
Collection<ParseTask> completedForks = invokeAll(
/** give a list work packages **/);
/** Join! **/
for (ParseTask task : completedForks)
/** Join all the results of the tasks and return this
collection **/