Greetings from JavaOne, errr, from CodeOne. After countless yearly pilgrimages to JavaOne, it was a scary and a suspicious thing to see the name changed. What does this mean for Java? What has Oracle in their mind?
TL;DR, all is good or better in the world of Java.
Oracle is clarifying what is free
Everyone got scared of Oracle JDK becoming commercial. It would be easy to misread this as an evil takeover, but how I read this is that Oracle just wants to be clear of what is free and what is not. Open JDK is truly free and now includes some parts that have only been available commercially before. This added clarity will be good for the ecosystem.
Expo is more alive than ever
For many years, Vaadin has been among the largest exhibitors in JavaOne. This year again, Vaadin, IBM, RedHat and Pivotal occupied the largest booths at the expo. While we have experienced years with less buzz and years with more buzz at the booth, the year 2018 was over the top. Long constant queues at our booth were a testament that things were working out: the conference was alive, people were excited about the new Vaadin platform and our reindeer mascot works like a magnet.
Java takes the competition seriously
Mark Reinhold gave a keynote on the future of Java, and I must admit that I went there being somewhat cynical. Shame on me. The keynote was great and I am really excited about the Java team taking the competition seriously and recognizing that Java needs to speed up the pace of improvement.
Here are a couple of things I am most excited about in 2019 for Java.
Speeding up the pace of innovation
2018 was the first year the Oracle team really lived in the 6 month release cycle and that helped them to spike up the cadence of delivering improvements to Java. While the work for building new features still probably is done at the same pace as before, we developers get them in our hands faster.
This is actually very close to Vaadin's new quarterly release model. While it is somewhat scary, the faster pace of innovation will be a good thing for everyone involved in the end.
Project Amber: Right-sizing the language ceremony
Java as a language keeps evolving by adopting the best features from others. Great artists steal, they say. One improvement I am eagerly waiting for is Raw String Literals (JEP 326) that finally makes it tolerable to mix markup with Java. In Java 12, you can write something like this:
<body> <p>Hello World.</p> </body> </html> `;
Even more exciting is that we'll finally get rid of ridiculously cumbersome data class definitions. Instead of building setters, getters, hashCode, equals and toString by hand (or having that ugly boilerplate generated), you can define the whole class as a record:
So one-liner instead of 30+ lines for defining a trivial container for a pair of values.
Project Loom: Continuations and fibers
Java threads are heavy as they are done on the OS level. With the overhead of context switching it has been hard to build high performing reactive services. With project Loom we will finally get easy access to concurrency without complexity and overhead of threads.
var f = new Fiber(() -> System.out.println("Hi")); // And scheduling that to run later is as well f.schedule()
When Fibers are applied to servers, the low overhead helps essentially to turn Jetty to Netty in no time as you do not need to keep blocking threads anymore.
Project Valhalla: Value types
In Java, almost everything is an object. And they refer to other objects in a seemingly endless graph. While this is ok for many high-level concepts (think of patient records), this is way too bloated when you want to process a large number of small records (think of neural networks).
That is solved by project Valhalla that brings us value types. They allow working with immutable and reference-free objects, in support of efficient by-value computation with non-primitive types. In other words, you will get the efficiency of flat C-like structs with the convenience of Java syntax.