On New Year’s Eve, 2018, I made a number of predictions about how I thought Java and related technologies might play out in 2019. Now that we’re more than halfway through the year, it seems like a good time to revisit those predictions and see how I’m doing—and how Java is doing.
Let’s step through all 11 predictions and provide some commentary on each one:
1. Java 11 starts to see small but significant adoption
My first prediction was that Java 11 would start to see small but significant adoption in 2019. I felt I was on fairly firm ground here because Java 11 was Oracle’s first major long-term support release. Those of us who have been in the industry for a while expected the enterprises and big shops to consider moving to Java 11—even when they might not have considered going to Java 9 or Java 10.
Specifically, I predicted that Java 11 would comprise 10% of overall Java production installations at the end of 2019, and as we are just past halfway through the year, we ought to see some 5% of installations being on Java 11. And lo-and-behold, roughly 5% of the Java production deployments we see here at New Relic are running on Java 11. (New Relic is a production tool, so this aggregate data reflects the actual condition of people’s production systems, rather than metrics based on, say, what is being used by developers in their IDE for experimentation purposes)
2. No large-scale porting of existing applications from Java 8 to Java 11
My next prediction was that we wouldn’t see many people doing a lot of rework to upgrade existing Java 8 applications to Java 11. Instead, I predicted that most of the growth was going to come from new services and from people trying to build new greenfield applications on Java 11 from scratch. I didn’t make a quantifiable prediction here, however, and this is not something that we can really see in aggregate New Relic user data.
Anecdotally, I think that maybe I was too pessimistic with this prediction. It’s certainly the case that as we roll out Java 11 internally at New Relic, there are quite a lot of teams who are enthusiastic about adopting the new version!
3. No analogue of the Python 2 / Python 3 divide
I think I’m on pretty safe ground with this prediction; although we are seeing versions of libraries specific to Java 8 also coming out in Java 11 flavors, we are not seeing a vocal split in the community like we saw with Python 2 vs. Python 3. My reasoning was that Java 8 and Java 11 are not really separate languages. Whilst Python 2 and Python 3 are not compatible at the syntax level, apart from modularity, Java 8 and Java 11 really are the same language—and every valid Java 8 program still compiles and runs with the same semantics used in Java 11.
4. Continued gradual adoption of Graal
Graal is the new just-in-time (JIT) compiler that comes in Java 11—and Graal is actually written in Java! (Try not to think about that too hard.) Graal has enjoyed a lot of exposure, and shops like Twitter have gotten a lot of benefit out of using Graal. My specific prediction here came in three parts:
- I predicted that 30% to 40% of Java 11 applications would use the Graal JIT in their production deployments. I don’t think we have enough data yet to say whether I’ve hit that one or not.
- I predicted that Graal would be discussed seriously as a contender for becoming the default JIT in Java 13 (which is scheduled for implementation in September, 2019). I have to say I’ve taken a bath on this one. That discussion has simply not come to pass.
- I predicted that GraalVM production deployments would remain rare, but would be experimented with by application teams. GraalVM is a fascinating computer science project, but it also hopes to offer some pretty impressive performance numbers. New Relic’s Java team tells me they haven’t had any inquiries about GraalVM, so I think my prediction is on pretty safe ground. In fact, I may have been a bit too optimistic. Maybe application teams are not even experimenting with it. (That would be a shame if true, because it is a super-cool technology.)
5. OpenJDK becomes the market leader for Java runtimes
I really stuck my neck out on this one. My testable prediction was that by the end of 2019, more than 50% of both Java 8 and Java 11 production runtimes would use OpenJDK rather than Oracle JDK.
I have to say that on the Java 11 side, I totally got it wrong—it’s way more than 50%. The requirements that we’re seeing of Java 11 are almost all OpenJDK. It seems that it has taken most enterprises (of those that want to adopt 11) more than six months to get around to it, by which time the Oracle JDK is out of free support. That means unless they’re prepared to pay for support, those enterprises have little choice but to adopt OpenJDK.
With Java 8, it’s still too early to tell. We’re not quite at 25% OpenJDK yet, but the first release of OpenJDK separate from Oracle didn’t arrive until April, 2019. I still think, however, that we’re going to see a big uptick over the summer and into the autumn. So even though I’m a bit behind right now, there’s still time for this prediction to pan out.
6. Release of Java 12
I predicted Java 12 would be released on time but garner only rounding-error production deployments by the end of 2019. While Java 12 did release on time (on March 19th 2019), we haven’t seen any real production deployments of Java 12 at all. So I think I’m on pretty safe ground with this one.
7. Release of Java 13
Similarly, I predicted Java 13 would also be released on time but garner only rounding-error production deployments by the end of 2019. I am ready to double down on this one—I don’t think we’re going to see many deployments there, either.
8. Value types does not ship as preview in Java 13
Well, we’re past the feature-complete date of Java 13, and we didn’t get any version of value types (which have now been renamed “inline classes”). I’m prepared to double-down on this prediction, as well, and say that we won’t get any version of value types, even in preview form, in Java 14 (due in March, 2020). The prototypes just aren’t yet complete enough to make this viable for shipment to mainstream Java developers.
9. Initial version of match expressions ships as preview in Java 13
Basically, match expressions is a modern language feature called pattern-matching, which languages like Kotlin, Scala, and Swift have had for a long time. Match expressions is also common in functional languages like Haskell. But while some of the first building blocks are more or less ready for Java, Oracle decided to re-preview one of those building blocks, which has obviously pushed out the timeline.
If I made this prediction today, I would say it was much more likely that match expressions would ship as a preview feature in Java 14, along with a finalized version of switch expressions. I guess we’ll find out next March!
10. Modest growth for Kotlin
You might want to think of the Kotlin language from JetBrains as a kind of Java++: taking up the mantle of an improved version of Java once promised by Scala. Kotlin provides a few extra features, more concise code, better refactoring, data classes, and a version of match expressions (see above). It offers an interesting upgrade path for Java developers, and it has become the dominant language for Android development.
When I made the prediction, I was wondering if there would be a trend toward Java developers adopting Kotlin alongside their existing projects. As of now, that has not happened. There is a steady trickle of people adopting Kotlin, and it’s very much supported (and encouraged) by Google for the Android space.
So, Kotlin has tooling support, it has high-level visible sponsorship, and it has some fans within the core Java community. But there haven’t been any buzzy libraries or other infrastructural components that have been written as Kotlin-first. Clearly, there’s no overwhelming tide of people abandoning Java to pick up Kotlin. I will admit to having something of a soft spot for Kotlin, but I think on the whole I got this prediction just about right.
11. Business as usual
While most of my predictions focused on the bleeding edges of Java, my last item suggested that the rest of the Java world would experience another year of more of the same … Java’s IDEs, libraries and the rest of the ecosystem will basically continue on the same trajectory.
Overall, I think I’m pretty happy with my set of predictions. I didn’t make any huge boo-boos—the only prediction that really missed the mark concerned Java 11 adoption. I should have realized that many people were going to adopt OpenJDK directly and that there wouldn’t be a lot of immediate Oracle Java 11 adoptions.
There is still a big chunk of 2019 left to go—and as we know, so much can change in the world of software in just a few short months. I plan to revisit these predictions at the end of the year and lay out some new predictions for 2020. I can’t wait to see how things have evolved in the ever-changing world of Java—especially the things that I couldn’t have predicted!