Top 10 Java 10 Features to Revisit before Starting with Java 11

javinpaul
ITNEXT
Published in
8 min readJan 14, 2019

--

What’s New in Java 10 by Pluralsight

Hello everyone! You might know that Java 11 was released just a couple of months ago. There is a lot of talk going around with whether it’s FREE or not. I won’t go into that in this article, as Java is still free for most of us.

While many Java developers are talking about JDK 11, there are many more developers who are yet to start with Java 9 and Java 10. Some people have even yet to adopt Java 8 in their projects.

And so, before you welcome Java 11, I suggest you revisit these 10 interesting features of Java 10.

The JDK 10 was the first release in the new release schedule. You will have a new Java release every six months. I know it’s quite early but that’s a reality now that Java 11 is out.

Apart from a release every six months, every 3 years there is an LTS release, which is a major Java release. The next LTS release is Java 11 which should be out in September. So you can aim for that. Then you can update three years after that to the next LTS release.

Even though JDK 10 looks to come out soon, there are some interesting features coming in JDK 10. I have yet to go into the details of that, but at first glance, they look useful and interesting to me.

Here is a quick note on those features:

1. Local Variable Type Inference (JEP 286)

Similar to Javascript, Kotlin, and Scala, now Java will also have a var keyword. This keyword allows you to declare a local variable without specifying its type.

The type will be inferred from context. For example when you say

var name = “Java”

then the compiler will already know the type is String.

I don’t know how useful this will be as I am quite used to seeing int i =0or String name = “Java”. I liked the type of information present in the variable declaration line. It looks like Java is going the way of Scala and Kotlin and is trying to incorporate changes from there.

Also, note that the var keyword can only be used for local variables (i.e. variables inside methods or code blocks). You cannot use it for member variable declaration inside the class body.

And, finally, it doesn’t make Java a dynamically typed language like Python. Java is still a statically typed language, and once the type is assigned you cannot change it.

For example, var name = “Java” is ok, but then name = 3; is NOT OK.

As Sander Mak puts in his Pluralsight course, What’s New in Java 10, this is one of the most eye-catching features of Java 10. This reduces the amount of boilerplate code needed to declare local variables in Java.

What’s New in Java 10

It’s not so obvious from a simple example, but consider where a method returns a complex list type. This requires a lot of angle brackets and generics to declare the type, and this really saves time in those cases:

var list = List.of(1, 2.0, "3")

Here the list will be inferred as list<? extends Serializable & Comparable<..>>which is an intersection type.

2. Time-Based Release Versioning (JEP 322)

From the JDK 10 release, Java has adopted a schedule of a new release every six months.

There is a lot of debate about whether this is a practical approach or not. Many are saying that it’s good that you will get new features every six months. Many are complaining that it’s too little a time to adopt a JDK.

Anyway, this will be the way forward with an LTS or major release every three years.

Also, The Update element will increment one month after the Feature element is incremented. The April 2018 Java release will be JDK 10.0.1, July 2018 release will be named JDK 10.0.2, and so on.

3. Garbage-Collector Interface (JEP 304)

This is one of the more interesting and useful Java 10 features which increases code isolation of different garbage collectors and introduces a clean interface for garbage collectors.

This means it will be easier to exclude a GC from a JDK build and it also easier to add a new GC without it affecting the codebase.

You can further see the Java Memory Management course to learn more about G1 Garbage Collection and the difference between G1 and Concurrent Mark Sweep Garbage collector.

4. Parallel Full GC for G1 (JEP 307)

Another interesting feature improves G1 worst-case latencies by making the full GC parallel.

If you remember, in the Java 9 release, G1 was made the default GC for JVM. This was designed to avoid full GC. When the concurrent collections couldn’t reclaim memory quick enough it would end up falling back on a full GC. That creates a problem.

This change will parallelize the full GC algorithm so that in the unlikely event of a G1 Full GC, the same number of threads can be used as in the concurrent collections to improve the overall performance.

If you want to learn more about Parallel Full GC for G1 then you should watch What’s New in Java 10 by Sander Mak. You will learn about the performance improvement done on the Java 10 release.

He has nicely put together some important JDK features in his short course on Pluralsight.

what is G1 Garbage collector

5. Heap Allocation on Alternative Memory Devices (JEP 316)

This sounds like a cool feature. It enables the HotSpot VM to allocate the Java object heap on an alternative memory device, specified by the user.

For example, this feature makes it possible to assign lower priority processes to use the NV-DIMM memory. Instead only allocate the higher priority processes to the DRAM in a multi-JVM environment.

Btw, if you don’t know much about JVM, I suggest you to first start with Understanding the Java Virtual Machine: Memory Management By Kevin Jone. It is a good introductory course on JVM.

best featurs to elarn from Java 10

6. Consolidate the JDK Forest into a Single Repository (JEP 296)

This new Java 10 feature is all about housekeeping. It will combine the numerous repositories of the JDK forest into a single repository.

Btw, If you want to learn more about Java 11 and what’s new in Java 11 then don’t forget to check out Sander Mak’s What’s New in Java 11: Long-term Support course on Pluralsight.

7. Root Certificates (JEP 319)

This is another important change Java 10 is bringing. If you remember, JDK 10 was created with the close collaboration with OpenJDK and this is evident from this feature.

It will provide a default set of root Certification Authority. This will make OpenJDK builds more appealing to developers.

It also aims to reduce the difference between the OpenJDK and Oracle JDK builds. Critical security components such as TLS will now work by default in OpenJDK builds

8. Experimental Java-Based JIT Compiler (JEP 317)

This is another interesting feature which enables the Java-based JIT compiler, Graal, to be used as an experimental JIT compiler on the Linux/x64 platform.

If you remember, Graal was already added back in Java 9, but now you can enable it with the following JVM arguments:

-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler

If you don’t know Grall is a new Java-based JIT compiler. It is the basis of an experimental Ahead-of-Time (AOT) compiler.

However, keep in mind that it is in an experimental stage and you should not use it for production. You can further check What’s New in Java 10 to learn more about this new polyglot Virtual Machine.

how to use GraallVM

9. Thread-Local Handshakes (JEP 312)

This Java 10 feature lays the groundwork for improved VM performance, by making it possible to execute a callback on application threads without performing a global VM savepoint. This would mean that the JVM could stop individual threads and not just all of them.

There are several small improvements done as part of this feature or JEP 312 to improve VM performance. Some memory barriers were removed. The JVM and biased locking are improved by only stopping individual threads for revoking biases.

10. Remove the Native-Header Generation Tool (JEP 313)

This is another Java 10 feature which focuses on housekeeping. It will remove the javah tool from the JDK. This is a separate tool to generate header files when compiling JNI code, as this can be done through javac.

You can download JDK 10 from Oracle’s website here to play with the new features:

best Java 10 features to learn

That’s all about some interesting features of Java 10 or JDK 10. There are a lot more low-level and API changes which you can find on Oracle’s official release notes. I’ll also blog about those changes when I learn them. You can stay tuned for more JDK 10 articles and tutorials here in Javarevisited.

Other Useful Resources for Java Programmers
What’s New in Java 10 by Sander Mak
10 Things Java Developer Should learn
Top 10 Java 8 Tutorials for Programmers
Top 10 Java 9 Tutorials for Programmers
10 Frameworks Java and Web Developer Should learn
20 Libraries Java developer should know
The Complete Java MasterClass to learn Java Better

Thanks for reading this article so far. If you like these Java 10 features then please share with your friends and colleagues. If you have any questions or feedback then please drop a note. All the best with JDK 10

--

--

I am Java programmer, blogger, working on Java, J2EE, UNIX, FIX Protocol. I share Java tips on http://javarevisited.blogspot.com and http://java67.com