Best version of Java for Ampere?

Hi, I’m curious if anyone has particular feedback on whether there’s a benefit for Arm64 performance for Java applications by moving to Java 17 over Java 11, and how much faster (for a compute-heavy application) Java 11 and Java 17 will do over Java 8?

Anyone who has gone through the process of migrating an application from x86 to Arm64 have any tips on performance impacts, or tuning tips, around the change of architecture?


I’ve done some benchmarks here. Usually see anywhere form a 15-20% boost from 8 to 17, unless you use the new accelerator for 8 that is only available with the Oracle Java.

On running, you do need to rethink the threads,and don’t compare Arm cores to x64 cores, but compare Arm cores to x64 threads. On smaller systems ( like 4 Arm cores) they are about the same, but when you ramp up to larger systems ( like 16 arm cores, 8 x64 threads) the Arm is way faster.

The other difference is memory throughput, Arm is slower than x64. So if your app moves a ton through Ram, it starts to even out more, with x64 being faster for some memory intensive workloads. Looking forward to see what Ampere is doing there in the future.

1 Like

So… I was really curious and spent today ( While on PTO) running benchmarks!

Short version, with this simple test Best was OracleJDK8 with the Performance pack, worse was OpenJDK8. Oracle Java 17 was almost as good as 8 with the pack.

OpenJDK8 - 1400000 calculations per thread
OracleJDK8 with the Performance rpm - 1970000
Oracle Java11 - 16300000
Oracle Java 17 - 19300000
Posting a BLOG shortly.


1 Like

Here you go!

1 Like

Thank you! This is amazing! And pretty amazing that you found similar performance betweek OpenJDK 17 and Java 1.8 with the Oracle perf pack. You also mention comparing JDKs - were you compiling and running on the same JDK/JRE? Or were there differences in performance running the same bytecode compiles with (say) OpenJDK 8 on the different JREs?

I compiled for each JDK version, same source though.

What about Temurin’s OpenJDK build?