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,