Are there performance differences between OpenJDK and Oracle?
Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzle Game 3
--
Chapters
00:00 Are There Performance Differences Between Openjdk And Oracle?
01:02 Accepted Answer Score 4
02:56 Answer 2 Score 2
03:31 Answer 3 Score 1
03:55 Thank you
--
Full question
https://superuser.com/questions/1365208/...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#jdk #jvm #openjdk
#avk47
ACCEPTED ANSWER
Score 4
You would find interesting this excerpt from an Oracle blog post:
Q: What is the difference between the source code found in the OpenJDK repository, and the code you use to build the Oracle JDK?
A: It is very close - our build process for Oracle JDK releases builds on OpenJDK 7 by adding just a couple of pieces, like the deployment code, which includes Oracle's implementation of the Java Plugin and Java WebStart, as well as some closed source third party components like a graphics rasterizer, some open source third party components, like Rhino, and a few bits and pieces here and there, like additional documentation or third party fonts. Moving forward, our intent is to open source all pieces of the Oracle JDK except those that we consider commercial features such as JRockit Mission Control (not yet available in Oracle JDK), and replace encumbered third party components with open source alternatives to achieve closer parity between the code bases.
As Oracle is responsible for creating both, it's clear that it will ensure that its clients will have good reasons for paying, and performance is the obvious means.
I believe that OpenJDK is interpreter-only JVM. This is easier to port as it has no architecture specific assembly code but, unfortunately, it's less performant.
OracleJDK I think takes advantage of the platform's floating point ABI (Soft Float on RP1 and Hard Float on RP2). It might also have some amount of platform-specific code to make it faster.
A JIT (just-in-time) compiler was once included in both, named Shark, but I have no knowledge if it is included in OpenJDK. Wikipedia OpenJDK does not mention JIT and I did find this old and troubling issue Remove Shark compiler. However, Wikipedia Java version history does include JIT.
If OracleJDK today includes a platform-specific JIT compiler, but OpenJDK does not, that might well explain the difference in performance,
ANSWER 2
Score 2
As for Java 11, the differences are basically the installer, crypto providers (signed vs. unsigned), and a few command-line options for advanced management and migration from earlier versions, as explained in this Oracle blog post: https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later
Earlier versions had a few additional differences: they had other 2D, font rendering, serviceability/management, and crypto libraries and that could cause performance differences, as explained here: https://www.thegeekdiary.com/openjdk-v-s-oracle-jdk-differences-between-openjdk-and-oracle-jdk/. Memory management and class data sharing could be the reason for different performance characteristics too.
ANSWER 3
Score 1
For us, the issue was determined to be something to do with haproxy
on Ubuntu
, and OpenJDK
.
If these 3 things were combined, we'd see an extra 5 ms delay on every socket connection.
Change any one of those 3 factors, and performance was restored.
Our particular solution was to change our haproxy load balancers to use Centos instead of Ubuntu.