Back to News
Advertisement
Advertisement

⚡ Community Insights

Discussion Sentiment

74% Positive

Analyzed from 3000 words in the discussion.

Trending Topics

#java#language#years#don#microsoft#version#using#net#oracle#versions

Discussion (110 Comments)Read Original on HackerNews

moominabout 2 hours ago
C# dev here: it’s amazing how different this is from a Microsoft release. First off, Oracle are doing versions at approximately twice the cadence. But also, and I’m guessing this is a function of the much larger Java audience: things rarely get two preview versions in a proper release. Updates in beta versions, yes, all the time. It also feels like Microsoft are bundling a lot more into the platform and leaving less to the community. Again, probably an artifact of the different sizes of the communities. Also, the page reads like an open source “We’re finished, we’re tired.” announcement rather than the razzmatazz of a Microsoft release.
kllrnohjabout 1 hour ago
> First off, Oracle are doing versions at approximately twice the cadence

Is that actually a good thing?

But Oracle started playing a game, for better or worse, where they decided to couple the "language version" with a single specific runtime's release schedule. For example, in "Java 27" there are exactly 0 language changes and 1 minor feature addition to the TLS library.

Everything else is OpenJDK runtime internals which don't impact the language or how you use it. So if you don't use OpenJDK (such as if you use Oracle's other runtime, GraalVM), then Java 27 basically doesn't even exist at all. Skimming the past couple of C# releases, it doesn't look like Microsoft is playing that game, so the release cadence will of course be different.

pron22 minutes ago
The Java language and runtime have been co-designed as a unified platform for many years now. Virtually every significant feature has language, library, and VM people working on it, and we often don't even know when we start how much of the feature would be in the language, library, or VM. Consequently, there is no "language version" or a "runtime version". There's only a platform version, which is defined in a single spec approved by the JCP (https://openjdk.org/projects/jdk/27/spec/). This also makes things easier with regards to compatibility and evolution.
hyperpapeabout 1 hour ago
You’re only counting JEPs, which are only for more involved features. There are lots of changes to the JDK apis that are used by other runtimes. See, for instance: https://javaalmanac.io/jdk/27/apidiff/26/.

Admittedly, the terminology here is almost designed to be maximally confusing, and I’ve never read a good post that laid out how everything relates.

kllrnohjabout 1 hour ago
Fair, although even there I don't know if I'd call that "lots" at just 23 added or modified methods that aren't in preview
cogman10about 1 hour ago
There's not really a second C# runtime. Java has several, some based on the Openjdk, but a few that are completely new like OpenJ9 and Graal.

The closest C# has is mono.

This sort of thing is bound to happen with that situation. Heck, it happens with C++ whenever a new C++ version comes out. Some C++11 features took years to make their way into all the compilers.

vlovich123about 1 hour ago
Graal is based on OpenJDK. OpenJ9 while using a separate JVM and JIT leverage the openjdk class path as well as the build environment and various other things.

I don’t think there’s a single alternate implementation that doesn’t leverage a good chunk of openjdk somehow

saghm19 minutes ago
I didn't read the parent comment as being particularly positive in their description; it didn't sound like it was being stated as a good thing to me.
petilonabout 1 hour ago
> Microsoft are bundling a lot more into the platform and leaving less to the community.

This is a good thing. In Java everything has multiple community offerings, so before doing anything you have to evaluate the community offerings and decide which one to go with. If you go with the wrong one you may end up having to switch at some point, and that can be painful. This happens so often that most of the time spent when using Java is doing these evaluations and comparisons. With C# you just use the one built into .NET platform. Saves a ton of time.

PaulHoule32 minutes ago
Sometimes the thing built into the .NET platform is great, sometime it is just crap but developers will use it anyway and it sets back the ecosystem.

There is this division of labor between systems programmers and application programmers and often we think systems programmers are better because they know more about algorithms and data structures and compilers and assembly language and such. On the other hand, application developers understand how to reconcile the mental model of managers and employees and customers with computers, reality and common sense and, once they get experienced, see the commonalities between all the run-of-the-mill bizapps that we are coding all the time.

Application programmers do a lot better at applications framework than systems programmers and make things like Ruby on Rails and Spring. Systems programmers make terrible things like ASP.NET MVC (I worked out a way to do MVC with ordinary ASP.NET, why couldn't they, with access to the platform internals?)

throwaway9103344 minutes ago
If someone wants to create a project by assembling bits and pieces from different open source products they can, but many just go for Spring (Boot) and call it a day.

All of my projects are based on Spring and I don't really have to look outside of that ecosystem. It almost acts as an aggregator of different open source solutions and often works by abstracting the functionality so that differences are not that big. I recently switched messaging providers and didn't have to change much of my code.

rwyinuse39 minutes ago
Yep, with Spring Boot development is so easy, and even decade old projects are mostly easy to upgrade. I don't have experience from C# or .NET development, but at least compared to Python and especially JS ecosystems it's so much better.
theandrewbaileyabout 1 hour ago
I never thought of Java being the 'move fast ~and break things~' alternative over .NET, but Java has a faster release schedule to get features out sooner.
madduciabout 1 hour ago
Seriously, how many are using always the latest releases of Java instead the LTS ones? With LTS ones you have ~2/3 years between the versions.
throwaway9103330 minutes ago
We often use the latest version of Java at my work place. We haven't had any issues with upgrading, so there's no benefit of waiting for an LTS. There's no big process behind it either. The developers just quietly change the version as part of keeping the project up to date (BAU)

It may be that we are shielded from edge cases because we are based on Spring, which is probably the most tested piece of software before new versions of Java are released. But it's my impression that the risk of upgrading to a new version of Java is not the same today as it was in the past. The only advantage of an LTS is that it is supported longer, so that you can postpone the upgrade if you really want. It's not as if the intermediate releases are inferior or less safe.

Betelbuddyabout 1 hour ago
>> Oracle are doing versions at approximately twice the cadence.

This has nothing to do with Oracle. All good that you hear from Java in the last few years, is the great community and good old people from Sun working at Oracle.

grodriguez100about 1 hour ago
“The good old people from Sun working at Oracle” is now Oracle as well.
hirvi7426 minutes ago
I kind of wish C# would slowdown releases in some areas. I have not been a huge fan of some of the changes in the past year. I love the performance changes and bits of functionality here and there, but the syntax-sugar is getting annoying.
ygra18 minutes ago
You don't really have to use the latest C# version, though. Install the latest .NET and you get the performance improvements without usually having to change anything about your code.
kittoes20 minutes ago
Interesting take, how is optional functionality annoying? Isn't the fact that it's just sugar a huge benefit? Us old timers can simply stick to what we're familiar with.
fourseventy13 minutes ago
Because unless you are the only person maintaining your codebase other people in your organization will start using the cool new syntax sugar and optional functionality. So you will be forced to deal with it as it starts showing up in your codebase.
pjc5019 minutes ago
I don't get this either. You can even lock the language level if you really don't want it, or you can just ignore it.
Phelinofistabout 1 hour ago
> Also, the page reads like an open source “We’re finished, we’re tired.”

I mean it's short and concise and there are additional resources that provide more detail. IMHO it's not a bad thing.

BatchJobabout 1 hour ago
razzmatazz? Do you mean marketing lies and self aggrandizement for merely doing shoddy work?
jayd16about 1 hour ago
Mads Torgersen's previews and such are enjoyable and upbeat, for example.
aaronaxabout 1 hour ago
"The Java Story" documentary by CultRepo on YouTube is pretty great. A major topic is the release cadence which some other comments here are mentioning / joking about.
Horffupoldeabout 1 hour ago
Serious question: when should one use Java for greenfield projects in 2026?
marginalia_nuabout 1 hour ago
Not at all a bad choice.

It's stable to the point of boring, and there's no shortage of people who know the language and can work with it, it's got best in class tooling, decades worth of libraries almost all very mature. Most of the language's issues are from legacy code bases coded in a style that isn't really relevant to a greenfield project.

gentlewater39 minutes ago
It’s still missing null safety, right? Which means it’s still a hard no for me.
winrid17 minutes ago
I have a couple 50k+ loc java projects written entirely by LLMs at this point that have never thrown an NPE.
marginalia_nu37 minutes ago
Have you tried not returning null or constructing incomplete objects?
LelouBil35 minutes ago
You can either use Kotlin then, or simply use java and nullability annotations, they have good support in both IDEs and analysis tools
well_ackshually19 minutes ago
Any serious project will be using NullAway and annotating everything (or, indeed, using Kotlin).

Otherwise, yeah, you're still in for a world of pain.

t0mas88about 1 hour ago
When building boring web applications with a sizeable team that need to run for a long time. Hiring developers is easy since there are many, there is nearly no magic and the language is quite strict and type safe so it works well with a large team.

And that "team" nowadays may also consist of many AI agents. In my experience Claude Code for example works very well with a typed, slightly boring language with lots of framework and library support. Because it doesn't compile when you get something wrong, instead of getting a vague runtime issue that Claude can't always see.

BoppreHabout 1 hour ago
> there is nearly no magic

I agree with the rest, but there's definitely a lot of magic in Java. This is from both what features the languages makes available (many) and how the community uses them (often). I've had so many hard-to-debug issues in Java over the years due to reflection, annotations, and bytecode manipulation shenanigans.

And another positive point for Java: checked exceptions. It's verbose, but knowing exactly in which ways a function can fail is extremely helpful for building robust applications.

kccqzy21 minutes ago
A lot of that is coding style. I’ve also seen a lot of hard-to-debug issues in Python caused by reflection, weird decorators that muck around with name-mangled symbols, and bytecode manipulation. It took me quite a long time to accept that the recommended unit testing library manipulates bytecode so that the exception message for `assert a == b` prints the values for both.
msluyterabout 1 hour ago
I haven't really been in the java space for a while now, but I recall there being a fair bit of criticism[1][2] of checked exceptions over the years.

[1] https://www.javacodegeeks.com/2026/01/javas-checked-exceptio...

[2] https://reflectoring.io/do-not-use-checked-exceptions/

WRT magic, I've generally thought that was a result of frameworks - Spring, for example. In the past, my feeling was that these impose a sort of meta/configuration language that itself is not checkable at compile time, so you'd get weird runtime errors that are somewhat inexplicable. This was like... 2018 though, so perhaps things have improved.

cavoirom9 minutes ago
I agree, to name a few:

- Annotation processing: if you know Lombok, MapStruct.

- Class loader.

- Reflection.

- Garbage collection.

theandrewbailey30 minutes ago
> but knowing exactly in which ways a function can fail is extremely helpful for building robust applications

I've worked on Java apps that have failed in mysterious ways that no exception could explain. Meanwhile, the overhead of having to call out certain exceptions but not others in language syntax is a bit excessive.

For example, decoding a byte array (or URL encoded form field) into a UTF-8 string means handling a theoretical UnsupportedEncodingException. What the fuck? How the hell can one have a JVM that doesn't support UTF-8? Why does my code need boilerplate that will never run because there might be some broken-ass JVM out there that that doesn't support UTF-8? How did it launch a web server, safely load all the libraries, and accept a web request, and route it to my code without blowing up? "But the encoding scheme might change..." No, it won't change. It's always going to be UTF-8. It will always be UTF-8. If it's not, let it blow up.

rwyinuse34 minutes ago
Java & Spring is a good choice whenever you want your application to work and be maintainable 10 years from now, without having to replace the framework and half of the libraries you used. I see few good reasons to ever use something with unstable ecosystem (like Javascript with NodeJS) over Java these days.
jjice25 minutes ago
Stability is a good point, although I am curious where JS and Node stand there now. They're not at the level of Java or .NET by any means, but the JS ecosystem has definitely begun to slowdown over the last few years. I've used express for the server and winston for logging for years and years now and they've very stable at this point.

I guess I'm asking this as an open question: Where are we in the "move fast vs stable" spectrum with Node these days? Definitely not rock solid, but it's moving in that direction I feel.

ulimn26 minutes ago
Not just the time, but the environment, the OS as well. Where you can run JVM, there's a pretty good chance you can run your app.
nonethewiser10 minutes ago
Here is a niche one:

When you want to make a game and support modding with pretty much zero development effort.

dorkypunkabout 1 hour ago
When you are already familiar with it or work in a Java shop, there are better options if you are starting from scratch, but if you already have 50 guys that know Java it's a pretty big ask for all of them to switch.
doublepg237 minutes ago
Why not Kotlin?
pron18 minutes ago
These days, Java is mostly used in greenfield software that has to be very reliable, very performant, and last for many years. So it's often the first choice for banking, telecom, finance, government, defence, manufacturing control, logistics and shipping, media streaming, retail, hospitality, healthcare etc.. It's usually not a first pick for more interesting and talked-about software, such as Python type checkers, JS bundlers, or TUI file managers.
throwaway9103310 minutes ago
I think of Java/Kotlin and Spring as a secret weapon for startups. My workplace was a startup 5 years ago and it's amazing how things just worked as expected. We have tried a few alternatives over the years, such as a few services in Rust, but the people who implemented those have usually seen the advantage of using a stable ecosystem after a few years. It's unfortunately something you need to experience yourself instead of being told by someone else.
astrodust16 minutes ago
Why not Go, Rust, or C#?
pron14 minutes ago
They lack in performance, stability (compatibility), observability (telemetry), productivity, or some combination thereof. They are chosen, of course (especially C#; Go and Rust are far behind), but not as much as Java.
Almondsetat13 minutes ago
Go and Rust have much worse tooling for enterprise-level collaboration
skeletal88about 1 hour ago
Same question for .net or C#

Why should anyone use it over Java? Ms is hostile towards its developers, it creates new versions of things, deprecates previous versions, uses confusing naming for newer versions.. etc.

bitgeist2 minutes ago
Microsoft has come a long way since Satya Nadella took over in early 2014. The open-sourcing of .NET Core that same year was a huge step forward. Seeing a 'Microsoft Loves Linux' slide that year was something I did not have on my bingo card. VS Code and the GitHub acquisition demonstrated Microsoft's interest in fostering good relations with developers instead of alienating them. I do wish GitHub had stayed independent, though.

Microsoft is a business and will always put their business objectives first. In my opinion, they have a non-zero amount of evilness. I do not support them jamming Copilot into every available crevice. I still think they make dumb choices, like every imperfect organization. However, C# is a powerful and intuitive language, and for Microsoft shops that already run a lot of Windows and SQL Server it makes a lot of sense.

No shade to the JVM. I've mostly enjoyed my time in that space. I do believe the choice between Java and Kotlin, the wide variety of vendor JDK distributions and IDE fragmentation make the JVM stack a bit more difficult for newcomers to break into.

hirvi7411 minutes ago
Because your employer is dick-deep in Microsoft psychosis.

I've been a .NET dev for a decade now. It's perfectly serviceable, but I wouldn't say I truly love the language anymore, but I would take it over Java any day. Entity Framework and LINQ are gifts from the Gods. I have never used an ORM that even comes remotely close.

Also, C# is big in the gaming world. I am working on a game right now, and I was not impressed with what many other languages had to offer. It seems like the kings are still C(++) and C#. Of course, Java can create games, but I would argue that is a "could vs. should" kind of decision.

Unity, Godot, Monogame, Raylib, XNA, FNA, etc. all can use or rely on C#. I have not seen Java be compatible with any of those -- except maybe Raylib? I do not know of anyone nor any games that use it though.

topbananaabout 1 hour ago
When you work at a Java shop. Kotlin is much nicer if you have to run on the JVM but aren't restricted to Java.
pjc5017 minutes ago
JavaFX is fairly high up for "I want to run the same UI on Mac and Windows, and I don't want it to be an Electron web app in a box".
kllrnohjabout 1 hour ago
When you think a garbage collected language is a good fit for whatever you're building?
kfirabout 1 hour ago
Wouldn't you go with golang in that case?
ndriscollabout 1 hour ago
Golang gives you none of nice features of a modern language while being about the same performance tier as Scala or Java, so there's basically no reason not to use Scala.
pron16 minutes ago
You could, but it's not as fast as Java, especially under heavy workloads, its telemetry is nowhere near as good, and it's much less popular.
topbananaabout 1 hour ago
I would, or C#
foolfoolzabout 1 hour ago
java is a great language for server side projects. it is actively maintained, the biggest issues with it have JEPs, and it’s very friendly to AI authors
eranation31 minutes ago
I wrote about it 13 years ago, some of it still stands true. https://news.ycombinator.com/item?id=5857495
orangesilkabout 1 hour ago
Jruby is nice - runs Ruby on a Java Virtual Machine with full concurrency and Ahead Of Time compilation
socoabout 1 hour ago
Whoever works with, or chooses Java, is not doing it for the language itself, be it beautiful or not. Java has a huge ecosystem, from battle tested integrations to optimized images to build pipelines to whatever, so at the same you're buying access to all this world (yes, more than an environment). And of course transferable skills. I'm not saying Java is alone offering this, also not saying every feature is the best, but you can have them all, and even choose from different options.
rzmmm23 minutes ago
I use Java for hobby projects, I think it's design choices make it a nice minimalist language for "classic OOP" style: dynamic dispatch, encapsulation etc.

Nowadays a lot of code is written with mostly procedural style with some functional characteristics, I wouldn't use Java for that.

marcosdumay29 minutes ago
Java's ecosystem is lingering since Oracle brought the language, and it's at the point where you should really look if the things you want to use are still in the state of the art, or if they felt behind every other language.

And if you are starting from scratch, whatever part of the ecosystem you use, I'm not optimist on its situation improving with time.

arein3about 1 hour ago
Project Valhalla will go into Java 28 (next year, and preview version).

Fingers crossed I'll manage to use null type safety in my lifetime.

pregnenoloneabout 1 hour ago
> Project Valhalla will go into Java 28

Unfortunatley without specialized generics and without the performance benefits that are supposed to come with it. They were too slow with Valhalla.

rf15about 1 hour ago
universal null type safety has sadly been discarded as a core concept of Valhalla in my Understanding; that being said, the proposals in Valhalla have null-safety as a side effect, but only under certain conditions.
MrBuddyCasinoabout 1 hour ago
When (if) null safety ships, I‘m not sure I can justify using Kotlin any longer.

Java simply got too nice.

hn872630 minutes ago
Multiplatform and Compose come to mind as Kotlin differentiators. I agree rest of the language actually slowly falls behind
karussellabout 1 hour ago
A first step of Valhalla that is ...
svcrunchabout 2 hours ago
I've been using the Vector APIs for years now, and I'm still waiting for them to GA!

They are useful for neural information retrieval (RAG, memory), which relies heavily on content vectorization and similarity matching using their dot products.

taspeotisabout 2 hours ago
Knock knock

Who's there?

long pause

Java

Betelbuddyabout 1 hour ago
High Speed Trading team using Java looking puzzled ....

https://lmax-exchange.github.io/disruptor/

what_hn3 minutes ago
Agentically convert to rust, get more trades faster
Bluesteinabout 1 hour ago
This thing is a-ma-zing. It is truly a wonder. It is something to behold. The "Disruptor" pattern.-
lazystoneabout 2 hours ago
Oh, I see, jokes from 30 years ago!
Boereckabout 1 hour ago
Alternatively:

Knock, knock

who's there

It's the 90s, wanting their jokes back

HelloUsername43 minutes ago
The long pause between the knock and the answer took 30 years
nairboonabout 1 hour ago
And still funny today, not all jokes survive that long.
winrid12 minutes ago
Don't put a 30gb heap on m4 boxes and you'll be okay
azatomabout 2 hours ago
It's on you bc it was (arguably but still) dead 17 years ago.

edit: don't get me wrong, i am not here to hate java, but bc i am also ... hm necrophil :)

taspeotisabout 1 hour ago
17 years is a rookie number. Take C# auto-properties, for example: 19 years ago!

Now try asking, "When did Java get auto-properties?"

marginalia_nuabout 1 hour ago
News at 11.

Language that runs on the explicit design philosophy of letting other languages experiment first and then incorporating their lessons learned once the dust has settled is late to implement a feature.

nsxwolfabout 2 hours ago
G1 is now the default garbage collector in 27.
taspeotisabout 1 hour ago
Sorry I only just set -xXx360NoScopexXx=4G to run that latest version without hitting OOM and you are right, it is indeed quite fast with G1.
paulddraperabout 1 hour ago
You misunderstand, xxx360NoScopexxx is now the default.
rf15about 1 hour ago
> Twelfth Incubator

Are you sure this egg is actually viable?

I mean, I'd love to see it, but...

papercrane38 minutes ago
The JDK team made a decision awhile ago to hold the Vector API until value types are final. That's why the API has been incubating so long.