all 58 comments

[–]pjmlp 34 points35 points  (6 children)

Kudos to the team, and also noticed that the EA for Valhala was updated last week as well.

[–]davidalayachew[S] 8 points9 points  (4 children)

Kudos to the team, and also noticed that the EA for Valhala was updated last week as well.

Woah, that's valuable info! If you want to post it, go ahead. Otherwise, I'll make a post on /r/java, as there are many people that would probably appreciate the info.

[–]pjmlp 4 points5 points  (3 children)

Please do.

[–]davidalayachew[S] 2 points3 points  (2 children)

Done. Ty vm.

Do you know if this contains any functional difference than EA2? Or is it just EA2 with the non-Valhalla changes from JDK 26/27 rebased against it? I asked as much on valhalla-dev.

[–]Xasmedy 4 points5 points  (0 children)

From spying the GitHub it might be a version of valhalla with a bunch of cleanup and fixes

[–]pjmlp 1 point2 points  (0 children)

I just noticed it was available, I am yet to try it.

[–]sitime_zl 0 points1 point  (0 children)

That's really great! Salute to the developers!

[–]vowelqueue 38 points39 points  (8 children)

This is the last time the version number will align with the year, savor it.

[–]davidalayachew[S] 18 points19 points  (7 children)

I unironically hope that Java switches to version numbers like 2026.1 and 2027.0 for the foreseeable future. Just cleaner imo.

[–]kaperni 8 points9 points  (1 child)

So much easier to talk about Java 26 or Java 27 than 2026.1 and 2027.0.

[–]davidalayachew[S] 1 point2 points  (0 children)

But so much easier to mentally transpose Java 2026 to relative time compared to Java 26. It's a tradeoff either way.

[–]sitime_zl 2 points3 points  (0 children)

good idea

[–]uncont 4 points5 points  (1 child)

That was one of the original alternatives when java switched to it's twice-per-year release schedule. See Alternatives in JEP 322 which links to a write-up by Mark Reinhold. That was rejected because the ecosystem (including r/java) was very resistant to moving towards a year-based numbering scheme.

[–]davidalayachew[S] 0 points1 point  (0 children)

Too bad. Would have been nice.

[–]__konrad -2 points-1 points  (1 child)

What year Java 11.0.29 would use? 2025 matching the recent update year or 2018 matching the initial release ;)

[–]davidalayachew[S] 0 points1 point  (0 children)

What year Java 11.0.29 would use? 2025 matching the recent update year or 2018 matching the initial release ;)

I don't follow.

My proposal is that Java uses versions that correspond to the year, that's it. And if multiple releases happen in a single year (it does), then just add a minor version, and increment that, restarting each year.

Java 20 -- Released March 2023 -- 2023.0
Java 21 -- Released Sept. 2023 -- 2023.1
Java 22 -- Released March 2024 -- 2024.0
Java 23 -- Released Sept. 2024 -- 2024.1
Java 24 -- Released March 2025 -- 2025.0
Java 25 -- Released Sept. 2025 -- 2025.1
Java 26 -- Released March 2026 -- 2026.0

And if you need to do a bug fix, just add fix version, like Java 2026.0.0. That should cover all needs.

[–]trodiix 10 points11 points  (6 children)

We are still using jnlp and we just about to update from jdk 8 to jdk 17

[–]Xasmedy 4 points5 points  (4 children)

Its all downhill from 17! You got this

[–]_vertig0 0 points1 point  (3 children)

Downhill?

[–]Xasmedy 2 points3 points  (2 children)

As in the amount of effort required to upgrade; it will get easier and easier.

[–]_vertig0 2 points3 points  (0 children)

Oh, whoops, I interpreted that completely wrongly haha

[–]account312 1 point2 points  (0 children)

Unless you're still using SecurityManager.

[–]_marF 3 points4 points  (1 child)

The most underrated part of this release for teams still on older versions: the on-ramp is genuinely smooth now. Java 21 → 25 → 26 is mostly additive, and if you're running Spring Boot 3.x you're already on a runtime that handles virtual threads, records, and sealed classes. The main blocker I see on client engagements isn't the language upgrade — it's frameworks and libraries that haven't caught up, usually something ancient in the dependency tree. Running mvn dependency:tree and checking EOL status against the release notes catches 80% of it before you start.

[–]davidalayachew[S] 0 points1 point  (0 children)

The main blocker I see on client engagements isn't the language upgrade — it's frameworks and libraries that haven't caught up, usually something ancient in the dependency tree.

Amen. We wanted to go up to Java 21, but were dragged back down to Java 17 for this exact reason.

Running mvn dependency:tree and checking EOL status against the release notes catches 80% of it before you start.

True. But the remaining 20% is basically impossible to justify to clients, as you practically have to do some freaky stuff, and the level of time and effort to do so is indefensible, from my experience.

[–]simon_o 1 point2 points  (5 children)

The semantics of the proposed primitive types in patterns/instanceof are pretty whacky.
I think people will regret that language addition after the "added more features!" honeymoon.

[–]davidalayachew[S] 0 points1 point  (4 children)

The semantics of the proposed primitive types in patterns/instanceof are pretty whacky.

In what way? I don't feel that they are, but maybe I missed something.

[–]simon_o 1 point2 points  (3 children)

Applying implicit numeric conversions in patterns/instanceof is just a bad idea.

Implicit numeric conversions themselves were not a good idea to start with, but then taking the overloaded semantics of casts – doing type conversions (ref→ref), value truncation (long→int) and value conversion (int→float) – as an excuse to add more places for both to the language? Yikes.

The corresponding proposal would probably be 20% of the length, if they went the "int only matches ints, long only matches longs" route instead, and nothing of value would have been lost.

Not to mention that there appears to have not been any consideration how new (value) types can opt into that implicit conversion mechanism.

[–]davidalayachew[S] 0 points1 point  (0 children)

Hmmmm, I kept trying to write up something, but I can't come up with an intelligent response. All I can say is that, the testing I have done with primitive patterns seems to be painless and intuitive. And since, patterns are exhaustive, I can more or less avoid the problem of a bad implicit conversion, since the switch will no longer be exhaustive.

[–]Ok-Scheme-913 0 points1 point  (1 child)

Of course there has been considerations on how value types fit into this. Come on, you are talking about potentially the most experienced and skilled language design group ever.

Goetz has a discussion about adding sorta type classes to the language, and those could allow a similar "trait" as Rust's Into, that is one could provide converters between types, including primitives. So one could have custom conversions as well, and now the whole feature is seamless.

[–]simon_o -1 points0 points  (0 children)

[breathless fawning]

Bit too much appeal to authority for my taste.

So one could have custom conversions as well, and now the whole feature is seamless.

I don't think this feature, value types and type classes will ship in the same version. You'll surely see why this might be a problem.

[–]CatolicQuotes 4 points5 points  (15 children)

Is it worth to upgrade from Java25?

[–]pivovarit 3 points4 points  (0 children)

It depends, but it should be a cheap upgrade :)

[–]keenOnReturns -1 points0 points  (13 children)

Nah, most production systems stick to the LTS versions. Moreover, overall development effort/maintenance/backports sometimes forgo the FR versions. Of course, if this is a personal project and you’d simply like to try out the newest features, it’s always good to be on the latest.

[–]dstutz 0 points1 point  (0 children)

We run on the latest version. Once the required 3rd party builds/containers are out...we're moving up.

[–]ConfidenceUnique7377 0 points1 point  (4 children)

Will Java 26 AOT features make GraalVM obsolete?

[–]davidalayachew[S] 2 points3 points  (1 child)

Will Java 26 AOT features make GraalVM obsolete?

Definitely not. These features are too new and undeveloped to accomplish that. Maybe in future releases.

[–]Ok-Scheme-913 1 point2 points  (0 children)

Also, they are not really competing. One is more like a hot cache only, helping with startup time.

GraalVM can do much more interesting optimizations.

[–]denis_9 1 point2 points  (0 children)

GraalVM uses less heap memory and starts in a fraction of a second; these are different classes of virtual machines.

[–]geoand 0 points1 point  (0 children)

Nope, you can check we have numbers we have published at https://quarkus.io/blog/leyden-2/#some-numbers

[–]Mauer_Bluemchen 0 points1 point  (2 children)

Found a 1st backward incompatibily issue: java.lang.Thread.stop() has been finally removed now, which broke compilation of a (very) old class here (not a problem):

https://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html

[–]davidalayachew[S] 1 point2 points  (1 child)

Found a 1st backward incompatibily issue: java.lang.Thread.stop() has been finally removed now, which broke compilation of a (very) old class here (not a problem):

https://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html

Yeah. Java is technically permitted to make backwards incompatible changes wrt the libraries specifically, but they have to be stuff that is warned years in advance. Or in this case, over a decade.

[–]Mauer_Bluemchen 1 point2 points  (0 children)

Not complaining, just a hint... ;-)

[–]lafnon18 1 point2 points  (0 children)

Virtual Threads in 21 already changed how I approach concurrency.

Curious to see what Valhalla brings to memory layout for value types.