What's new in Java 11 (Changes in JDK 9, 10, 11)
Java changed release schedules, though the version number bumps up every 6 months, Java 11 is the first long term supported version after Java 8, and the next likely LTS version is Java 17. This page lists changes in JDK 9 through 11.
Language and Library Changes
Changes in how we code:
- Modules
- JEP 286 / JEP 323 Local-variable:
var foo = new Foo();,(var x, var y) -> x.process(y)(equivalent to(x, y) -> x.process(y)) - private methods in interfaces.
- JEP 321/JEP 110 HTTP Client API:
java.net.http - Updated to Unicode 10
- JEP 102 Improvements to
java.lang.Processandjava.lang.ProcessHandle
And "JRE" is no longer a thing after JDK 9.
Easier Ways to Learn Java
jshell
An interactive shell for java.
Single-File Source-Code Programs
Execute a single .java file like other scripting languages(e.g. Python).
Add shebang to the beginning of the file.
#!/path/to/java --source version
This command:
$ java HelloWorld.java
is informally equivalent to
javac -d <memory> HelloWorld.java
java -cp <memory> hello.World
Under the Hood
- JDK 9:
jlinktool to create customized runtime. (1) Thejava.basemodule must be included in the runtime; (2) if any other Java SE Spec defined modules are included, all the dependencies(requireselements inmodule-info.javafile) must be included. - JDK 11: removed Applets and Java Web Start.
- default garbage collector changed from CMS to G1
- JEP 254 Compact Strings: change internal String representation from UTF-16(2 bytes per character) to byte array, depending on character type, latin character may only take 1 byte. This is different than the one with UTF-8 as encoding.
- JEP 280 The bytecode for string concat changed to use
invokedynamic. In Java 8,invokedynamicwas only used for lambdas. - JEP 309
CONSTANT_Dynamic: a new constant-pool form. - CDS(Class Data Sharing): Share classes/data between multiple JVMs by using shared memory: loaded classes, Ahead-Of-Time (AOT) compiled code, commonly used UTF-8 strings, and Java Archive (JAR) file indexes. Available in commercial JVMs(e.g. from IBM and Oracle) as early as Java 5; became open-source since JDK 10. CDS helps reduce the startup time and memory footprint.
-Xshare:autois enabled by default for the server VM in JDK 11.
Tech Debt
- JEP 214 Remove Deprecated GC Combinations
- JEP 231 Remove Launch-Time JRE Version Selection
- JEP 240 Remove
hprof: stop building and shipping thehprofagent library (libhprof.so) as part of the JDK. - JEP 241 Remove
jhat - JEP 298 Remove Demos(
jdk/src/demo) and Samples(jdk/src/sample) - JEP 313 Remove
javah, superseded byjavac - JEP 320 Remove Java EE and CORBA Modules
- JEP 335 Deprecate Nashorn and
jjs - JEP 336 Deprecate the
pack200andunpack200tools, and the Pack200 API injava.util.jar.Pack200. The compression tool is deprecated because download speed improved and modules were introduced in JDK 9. - JEP 289 Deprecate Applet API
java.applet - JEP 291 Deprecate CMS
- JEP 296 Consolidate the JDK Forest into a Single Repository
- JEP 299 Reorganize Documentation