“JDK 23, the reference implementation of Java 23, is now Generally
Available. We shipped build 37 as the second Release Candidate of
JDK 23 on 21 August, and no P1 bugs have been reported since then.
Build 37 is therefore now the GA build, ready for production use.
GPL-licensed OpenJDK builds from Oracle are available here:
https://jdk.java.net/23
Builds from other vendors will no doubt be available soon.
This release includes twelve JEPs [1], including the switch of ZGC’s
default mode to the generational mode (474):
455: Primitive Types in Patterns, instanceof, and switch (Preview)
466: Class-File API (Second Preview)
467: Markdown Documentation Comments
469: Vector API (Eighth Incubator)
473: Stream Gatherers (Second Preview)
471: Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal
474: ZGC: Generational Mode by Default
476: Module Import Declarations (Preview)
477: Implicitly Declared Classes and Instance Main Methods (Third Preview)
480: Structured Concurrency (Third Preview)
481: Scoped Values (Third Preview)
482: Flexible Constructor Bodies (Second Preview)
This release also includes, as usual, hundreds of smaller enhancements
and thousands of bug fixes.
Thank you to everyone who contributed this release, whether by designing
and implementing features or enhancements, by fixing bugs, or by
downloading and testing the early-access builds!
I need someone to sell me on Java. I might need to learn it soon for a project but it never before occurred to me that it is something I should use.
I came up in coding in the early 00's. To me Java was that slow, buggy, sometimes dangerous browser plug-in that I think most people loathed?
On Mac OS X at least Java desktop apps were always slow, ugly, and broke the platform UI conventions.
Then Java was that language Google used for Android and then ended up in a long, expensive lawsuit over it with Java's owner Oracle.
It is cross-platform as a big selling point but then people use it to write monolithic server applications where cross-platform capability isn't useful.
It seems to be kinda, sorta open source but don't fuck up with the licenses or Larry's lawyers will come for you. I'd rather just use a fully open language where the community can guide its progress.
I am sincerely not trying to start a flame war or be condenscending. I would like to expand my thinking and understand what I am missing out on.
With respect to being open source - it’s GPL licensed (with classpath exception), and there are several vendor-supported builds of the JDK. People typically use these or OpenJDK. You only run into licensing trouble if you use the gratis, commercial build of Java provided by Oracle, which you would only do if you’re a newbie or have a highly unusual usecase (there’s really no other reason to use it, even in industry).
Java has a massive ecosystem which has the benefit of having both extremely stable, old libraries and newer stuff. It’s the language of industry and middleware; it’s verbose (but less so in recent versions); it’s reliable and easy to reason about. Its strong/static/declared typing is something that some people don’t get around, which is fine for them but really it’s just nice for sanity when working with a code base that’s more than a few thousand lines or that someone else wrote.
I reckon it’s the Corolla of programming languages. For what it’s worth I think it’s also pretty fast, even though its zero-to-sixty might not be very impressive.
Java is mostly used for server applications and occasionally for desktop apps (e.g. IntelliJ) these days. Applets aren't relevant anymore since all browsers removed them.
Java is memory-safe, multi-threaded and JIT-compiled. Faster than python, safer than Go or C. It has good tooling (debuggers, profilers, IDEs). It was one of the first languages to bring safe shared-memory multi-threading to the table, its memory-model came before C++'s. Its FFI story has been lacking for a long time, but this has been improving with java.lang.native.
Over the years it has adopted a lot of nice features that other languages have mainstreamed. So 2000s Java is not 2020s Java.
The JVM can also run a bunch of other languages.
There are many 3rd-party, FOSS builds of the JDK, so you don't need to use oracle's builds.
GCs have improved a lot. Lower latency, more parallelism, more throughput. Though they still need a good amount of RAM as breathing room.
Startup times and memory consumption can still be an issue. They're working on value types that should help with memory efficiency too.
And as with any language: even if the base language is fine, a project can still make it hell. Extremely convoluted "Enterprise Java" projects that layer interceptors, factories, dependency injection and what-not on top of each other are infamous for that.
And it powers 70% of the world mobile phone market (even if ART isn't technically a JVM implementation), Xerox and Ricoh printers, Cisco inteligent phone terminals, M2M gateways, military battleships targeting systems, missile tracking systems, factory robots,....
> It is cross-platform as a big selling point but then people use it to write monolithic server applications where cross-platform capability isn't useful.
Being able to locally develop/debug on Windows/Mac and deploy to Linux servers is very useful. And changes like the Apple Silicon transition only required dropping in a new ARM JDK instead of updating hundreds of tools and libraries.
I have been writing Java for a living for about 13 years. Prior to that I was doing C++.
If you have no case to use Java, use something else that takes your fancy. Java's strengths are not for the casual user. If you want a fun language to learn and do smaller projects, there are better choices.
If you want to run a company with a serious server side architecture, Java is a great choice.
I will repeat a previous post of mine for why. Java is a straight forward language with fewer gotchas than some others (but definitely not none). In our monorepo we have code that does not care terribly much about latency or garbage, while other code that cares very much about latency and garbage. Our hotpath is GC free and the code is written with this in mind. Yes, it is a slightly different style of code, but it is still Java and our developers don't have a lot of trouble jumping from one area of the codebase to another. That means we share many of the same abstractions, the same build, the same monitoring, the same deployments (sort of), and many other things and we only ever have to hire good Java developers. We can write very different styles of application, in the same codebase, very easily.
These days, garbage is also mostly a non-issue if you've got any sort of awareness and competence. With ZGC or other choices, even if your app generates a lot of garbage, you can still achieve very high performance. Again, to repeat, this means you can write code without caring _all that much_ if you're happy with "good enough". And you can tweak it later because there are just so many good tools for performing runtime analysis. And if you do care massively about performance, Java has it. It is possible to write Java code that will come close to C or C++ performance, and you don't need another language, build system, etc to achieve it.
That alone is probably the biggest selling point to larger firms in this space.
And on top of that, in my industry (finance), Java is quite ubiquitous, which means portable skills. It's attractive to developers because they're not risking a dead end skill. They know Java is everywhere in the industry, they're transferable, and finding talent isn't an impossible task. This is self reinforcing, meaning the choice of Java is as strong as ever.
Oh and modern Java is much nicer to work with than old school Java, and becoming better. We're very confident with our choice and we can see a good future ahead for the language.
It's an average imperative OO language that has a lot of devs, a lot of libraries, and world-class optimization of GC and method dispatch (Sun had acqui-hired the StrongTalk team).
I am a fan of Scala, personally, when it comes to its use as a more concise, more elegant Java - with full access to the Java ecosystem and its libraries.
I feel for the enterprise Java devs. Doesn’t matter how good the language becomes and what shiny new features it gets, they are forever tied to a version 20 years out of date. Working with a client right now with dozens to close to a hundred Java 8 apps still being maintained.
“JDK 23, the reference implementation of Java 23, is now Generally Available. We shipped build 37 as the second Release Candidate of JDK 23 on 21 August, and no P1 bugs have been reported since then. Build 37 is therefore now the GA build, ready for production use.
GPL-licensed OpenJDK builds from Oracle are available here:
Builds from other vendors will no doubt be available soon.This release includes twelve JEPs [1], including the switch of ZGC’s default mode to the generational mode (474):
This release also includes, as usual, hundreds of smaller enhancements and thousands of bug fixes.Thank you to everyone who contributed this release, whether by designing and implementing features or enhancements, by fixing bugs, or by downloading and testing the early-access builds!
- Mark
[1] https://openjdk.org/projects/jdk/2/“