This document summarizes Joseph S. Kuo's presentation on the retrospect and prospect of Java. It discusses the history and major features of Java versions from 1.0 to 11. Key developments include the addition of generics, lambdas, and modules. The presentation outlines new features in Java 9 like modularization and Java 10 like local variable type inference. It also previews upcoming features in Java 12 like switch expressions and raw string literals.
5. “A simple, object-oriented, distributed,
interpreted, robust, secure, architecture
neutral, portable, high-performance,
multi-threaded, and dynamic language.”
— Sun
#JCConfTaiwan 2018
6. History
• 1991: Oak language is born
• 1994: Java 1.0a became available for download
• 1995-05-23: Java 1.0a2 released with HotJava browser.
• 1995: Sun renamed Oak to Java.
• 1996-01-23: Java 1.0 released
• 1996-05-29: 1st
JavaOne Conference, > 6k attendees
• 1997: > 400k developers, 2nd
JavaOne, > 10k attendees
• 1998: 3rd
JavaOne, >15k attendees (Java Ring)
• 1999: J2SE, J2EE, J2ME
#JCConfTaiwan 2018
7. History
• 2000: Java is applied from servers to devices
• 2005: 10 years, 4.5M developers, 2.5B devices
• 2006: Java is open sourced
• 2007: first version of OpenJDK is released
• 2011-07-07: Java SE 7 released (OpenJDK)
• 2015: 20 years, > 12M developers, 15B devices
• 2017-09-21: Java SE 9 released
• 2018-03-20: Java SE 10 released
• 2018-09-25: Java SE 11 released
#JCConfTaiwan 2018
18. JDK 1.0 (1996-01-23)
• First stable version, JDK 1.0.2, is called Java 1
• Syntax is similar with C/C++
• No pointer, no operator overloading, no multiple
inheritance
• Object class
• Interface
• Package system
• AWT
• Garbage Collection
#JCConfTaiwan 2018
20. J2SE 1.2 (1998-12-08)
• Codename: Playground
• Collections Framework
• Added keyword: strictfp
• Java plug-in
• Integration of Swing graphical API into core classes
• JIT compiler in Sun’s JVM for the first time
#JCConfTaiwan 2018
21. J2SE 1.3 (2000-05-08)
• Codename: Kestrel
• HotSpot JVM (released in 1999-04)
• JNDI included in core libraries (was an extension)
• Java Platform Debugger Architecture
• JavaSound
• Synthetic Proxy classes
#JCConfTaiwan 2018
22. J2SE 1.4 (2002-02-06)
• Codename: Merlin (JSR 59)
• First Java platform developed under JCP
• Added keyword: assert (JSR 41)
• Regular Expression
• Exception chaining allows to encapsulate exceptions
• IPv6
• Java NIO (JSR 51)
• Logging API (JSR 47)
#JCConfTaiwan 2018
23. J2SE 1.4 (2002-02-06)
• Image I/O
• Java Web Start (JSR 56)
• Preferences API (java.util.prefs)
• JAXP: XML parser (JSR 5) and XSTL processor (JSR 63)
• Integrated security components: JCE, JSSE, JAAS
#JCConfTaiwan 2018
40. Parallel Full GC for G1
• The G1 garbage collector is designed to avoid full
collections, but when the concurrent collections can't
reclaim memory fast enough a fall back full GC will occur.
• The current implementation of the full GC for G1 uses a
single threaded mark-sweep-compact algorithm. We
intend to parallelize the mark-sweep-compact algorithm
and use the same number of threads as the Young and
Mixed collections do.
• The number of threads can be controlled by the
-XX:ParallelGCThreads option, but this will also affect
the number of threads used for Young and Mixed
collections.
#JCConfTaiwan 2018
41. Application Class-Data Sharing
• Currently CDS only allows the bootstrap class loader to
load archived classes. Application CDS ("AppCDS")
extends CDS to allow the built-in system class loader
(a.k.a., the "app class loader"), the built-in platform class
loader, and custom class loaders to load archived classes.
• By default, Class-Data Sharing is enabled only for the
JVM's bootstrap class loader. Specify the -XX:+UseAppCDS
command-line option to enable class data sharing for
other loaders.
• java -Xshare:off -XX:+UseAppCDS -XX:DumpLoadedClassList=x.lst -cp x.jar HelloWorld
java -Xshare:dump -XX:+UseAppCDS -XX:SharedClassListFile=x.lst
-XX:SharedArchiveFile=x.jsa -cp x.jar
java -Xshare:on -XX:+UseAppCDS -XX:SharedArchiveFile=x.jsa
-cp x.jar HelloWorld
#JCConfTaiwan 2018
42. Experimental Java-Based JIT Compiler
• Enable Graal to be used as an experimental JIT compiler,
starting with the Linux/x64 platform. Graal will use the
JVM compiler interface (JVMCI) introduced in JDK 9.
Graal is already in the JDK, so enabling it as an
experimental JIT will primarily be a testing and
debugging effort.
• To enable Graal as the JIT compiler, use the following
options on the java command line:
-XX:+UnlockExperimentalVMOptions -XX:
+UseJVMCICompiler
#JCConfTaiwan 2018