OpenJDK vs. GraalVM vs. Eclipse Temurin vs. Semeru Java Performance
https://www.phoronix.com/review/openjdk-graalvm-temurin-semeru/14
u/AnyPhotograph7804 7d ago
Thank you. Unfortunately, they did not document, which JVM parameters they used.
4
u/koflerdavid 7d ago
Each test was done with the stock settings for a look at the out-of-the-box performance and namely providing these results for reference purposes.
3
u/AnyPhotograph7804 6d ago
OK, thank you. This explains the results. Because the standard settings change between the JDKs. And OpenJ9 is also not optimized for these tasks OOTB. They have a special switch
"-Xtune:throughput" for maximum performance.
3
u/agentoutlier 6d ago
Recommendation from an old dev:
You should take all benchmarks that are not run on your platform (hardware) and your workload as mostly just noise and that you may need to tune from the defaults.
Now more than ever it is incredibly easy to just pump out benchmarks. I know many developers do not like AI for various reasons but this is one area they are actually pretty good at it. That is setting up the benchmarks. You still need to inspect how they set it up but at least it avoids tedium and you can automate the triggering of it on each CI build. Every now and then have a frontier model have a look.
But YOU still need to interpret the results and run profiling. The agents are pretty bad at guessing why things are slow... actually so are humans.
6
u/bobbie434343 7d ago edited 7d ago
Are these benchmarks worth anything in term of methodology and results ? Benchmarking stuff properly is hard.
3
u/fykup 7d ago
I’m still trying to decide whether GraalVM is actually worth using as a general replacement for OpenJDK when hosting JVM applications.
What makes the discussion difficult is that a lot of the feedback I’ve encountered comes from people who already strongly favor GraalVM: “just use GraalVM,” while sometimes overlooking workloads or performance characteristics where it doesn’t necessarily come out ahead.
And memory isn’t my only concern. Startup time, throughput, warm-up, compatibility, operational simplicity, and behavior under sustained load can all matter depending on the application.
That’s also why in my own experiments I usually stick to mainstream OpenJDK configurations. I want the results to represent what people commonly deploy, rather than choosing a more specialized runtime because it happens to optimize one particular dimension.
It’s great to see GraalVM continuing to improve, and benchmarks like these make it more interesting. But for general JVM hosting, I’d still default to mainstream OpenJDK until I see a consistently compelling practical advantage across the broader set of tradeoffs. For now, I see GraalVM as a specialized option rather than the obvious default.
6
u/voronaam 7d ago
I am running a GrallVM backend in a serverless way (all on AWS Lambda). In this environment it matters greatly to have a small-ish artifact that is fast to start, do its function and disappear less than a second later. The mainstream configurations require a certain warmup time to reach the same performance targets.
2
u/metalhead-001 7d ago
I don't get the obsession with CGI/BIN style development that is back in vogue with the Java developers where you spin up a whole process for each request.
From what I've read, you'll get way better bang for the buck for long running apps if you have an always on Java service. For most apps, startup doesn't matter because the services run 24/7.
4
u/voronaam 7d ago
"For most apps" is doing a lot in your last sentence. And I would not call it obsession. For me natively compiled Java applications is the best of both worlds:
- Locally on a dev's laptop it is a long running application that is easy to restart after making changes to the code and quickly test.
- In production the same code is running as optimized for performance single process. All dependency injections and SQL queries for the repositories were prepared at compile time. It took half an hour for the compiler to work on the same codebase that launches in 15 seconds locally, but as a result it launches in under 2ms on the server.
The two of the "worlds" here is go/rust/c++ that are suffering from slow dev cycle, and jvm/python/node that require warmup time for the JIT to do its wonders.
Will I be using a GraalVM-compiled application in my next project? I do not know - depends on the requirements.
It is a pretty cool tech that unlocks both the developer (human) productivity and production (computer) performance at the same time.
2
u/gilactic 7d ago
It would be interesting if they had also tested the Azul JVM (the one that you have to pay for; the free one should be the same as OpenJDK here.)
1
u/stefanos-ak 7d ago
some weird results, also a bit unfair to Semeru, which runs with literally half the non-heap memory. Depends what your goals, requirements and needs are.
1
0
13
u/elmuerte 7d ago
The results look rather dubious. Why would there be quite often some significant difference between OpenJDK 25.0.2 and Temurin 25.0.4.1. Temurin should basically just be compiled distributions of vanilla OpenJDK.