Migrating from Java 8 to Java 17: A Comprehensive Guide to New Features
igorstechnoclub.com
igorstechnoclub.com
I will be the first to admit that I have not adopted "modern Java", mostly with all of the functional stuff (notably all of the collection streams and what not).
I certainly enjoy easy lambdas, but I don't necessarily code stuff up that way.
I'm not big on locked down classes, as a general rule. I won't say I never use "private", but it wouldn't bother me if that didn't exist. I can't say I'd "never" use records, but I'm so used to the boiler plate, I don't really see it any more.
My one issue, though, is simply how heavy handed the Java 9 module system is. I have a desktop app, and I use the module system to lighten up the JRE that it bundles. But that's an edge case (to me).
I'm just not a fan of it, I find it gets in the way more than anything, and it just seems more forced than optional.
Outside of building JREs, does anyone use the module system for anything?
catch (Exception e) {
if (e instanceof IOException) {
} else if (e instanceof SQLException) {
} else if (e instanceof NumberFormatException) {
} else {
}
}
Older Javas already allowed choosing which Exceptions (and subclasses) to catch directly.I think OpenJDK 17 might also the highest LTS installable one on Debian 12 out of the box right now, but that's a lot less certain.
Ubuntu ships multiple runtimes for every supported distribution and does backports FWIW.
"But this should be simple! It's almost like a Go binary!" I've learned not to underestimate how long it can take to change infrastructure. DevOps isn't seen as a profit center in most places, and they might well have much bigger things to worry about than transitioning from a kind of working JARs-on-VMs approach.
I’ve been mildly watching the mailing list and they’ve had small progress.
https://docs.aws.amazon.com/elasticbeanstalk/latest/platform...
21 is supported for Amazon Linux 2023 and the JavaSE ElasticBeanstalk offering, though.
It's tied to .NET at the hip - there are no 3rd party implementations (Mono is effectively dead, correct me if I'm wrong), it's development is effectively solely driven by Microsoft, and every few years you have to rewrite all your things or get stuck on EOL versions of frameworks or abandoned tooling. The community is also vastly different in that it does not (yet) value open source and many different implementations of ideas (ie. there's an official Microsoft way to do X and that's what everyone does).
C# might be a fine language, but it's coupling to .NET and Microsoft are kind of a liability.
Java has a ton of warts, and it's not the language I'd choose today. However, it's ecosystem is FOSS-first and is immense in size and scope, has numerous options for any type of library/framework (take a loot at HTTP clients, or logging frameworks, or web frameworks, etc), and while Oracle primarily drives development they don't get the de facto final say anymore. There's also many JVM implementations and many class library implementations - all with different pro's and cons.
Perhaps .NET will get there one day. It is, after all, relatively new at FOSS/XPlat.
Surely you're not gonna say that OpenJDK and GraalVM (both owned by Oracle) is somehow an issue, would you? And Mono lives well in dotnet/runtime, serving targets like Browser WASM and iOS (until NativeAOT replaces it in full at that target, at some point).
But you're not using .NET, so no need to worry. No one is gonna pry Java from your hands, but we'll get to laugh at the choice - it is both slower in performance-oriented code and more verbose in LOB one. Pretty much the only driving reason behind choosing it is if the company is an Apache/Java shop or when a vendor offers an SDK in Java/Python/JS only due to their popularity which is a common issue in the industry.
Most people don't use the Oracle JDK anymore.
And OpenJDK is GPL licensed - and has no strings attached. What you are referencing are people using Oracle's First Party JDK (which has a base of OpenJDK + Secret Sauce). Oracle wants money for that.
> No one is gonna pry Java from your hands, but we'll get to laugh at the choice
I don't think anyone in Javaland are concerned. .NET usage is a tiny blip on the radar compared to Java/JVM ecosystem.
No, you don't need to pay for performance. The only people paying Oracle are those who choose to.
There are many JVM vendors - each with their own secret sauce, pros/cons and add-ons. Some charge to use, some charge for support, some just give it away. Almost all offer a for-free OpenJDK version as well.
Vendors include some of the biggest names in tech, such as Amazon and IBM, and many others you might only be aware of if you're in the ecosystem such as Eclipse Foundation, Azul Systems, Bellsoft, and more.
I would say the Oracle JDK/JVM is likely in the minority of JDK/JVM deployments today.
Oracle deliberately positioned themselves to be just another JDK/JVM vendor a few years back. All of the vendors can offer support etc. Oracle has no special control over OpenJDK these days, even if they pay the most full-time staffers to work directly on it.
The contribution graph would suggest otherwise: https://image.slidesharecdn.com/jcconf2021openjdkcontributio...
> No, you don't need to pay for performance.
Then what is the selling point of that, if you say crucial features are not closed-sourced and gated behind costly licensing?
I feel like this is among many other reasons that people get PTSD which causes them to throw the baby (C# of du jour bundled in public perception with Java) out with the bathwater (Java ecosystem) and move to, inferior in many ways, Golang.
The contribution graph says precisely what I claimed.
> Then what is the selling point of that, if you say crucial features are not closed-sourced and gated behind costly licensing
Each vendor can do what they want. As I have already said twice, some vendors give away their inhouse-built JVM/JDK and only charge for support, some charge to use it at all, and some just give it away entirely for free. Motivations for each vary by company.
The point is, you have a ton of choice within the JVM ecosystem. You have 1 choice for .NET... the ecosystem and community are not the same. The JVM ecosystem and community are vastly better by any measurement.
C# developer's only valid criticisms are levied at the Java language - failing to realize the slow development pace is deliberate and prevents people from having to rewrite everything every couple years...
Despite that, there are many languages that run on the JVM - so you don't even need to use Java to experience the greatness of the JVM ecosystem and community.
There's a world of different projects, beyond back-end applications, written in C# or even F# like games, scientific instrumentation and analysis, desktop and mobile applications (multi-platform or otherwise), trading systems, malware and anti-malware, and more. It's a really versatile and powerful tool.
Let's talk again when the project Valhalla is done and Panama vectors are actually usable for writing implementations that can compete with C++.
A lot of organizations that use Java are very conservative with their tech changes, and didn't see a compelling reason to upgrade. This was especially true since Android Java still used Java 8, so many popular libraries continued to support Java 8 for their Android userbase.
That, combined with some pretty large changes in the underlying security model, mean that a lot of places have been stuck on Java 8 for a real long time. It's much harder to move from Java 8 to Java 9/10/11 in a lot of places than it is to then go from 9/10/11 to 17, for multiple overlapping tech debt cleanup reasons.