OpenJDK, AArch64, and Fedora


, ,

For the really impatient reader: OpenJDK for AArch64 on Fedora is now
available.  Skip to the end of this blog for information about how you
can get it.

For everyone else:
This is the first of my AArch64 OpenJDK blogs.  I’m the project lead
of the AArch64 OpenJDK port, and I’ll be blogging here from time to
time.  There may not be many people reading this blog who don’t know
what AArch64 is, but it’s the new 64-bit version of the wildly popular
ARM processor.  General availability of real AArch64 hardware isn’t
going to be for a while yet, but we really want OpenJDK to be ready as
soon as it is.

Oh, and OpenDK is the reference implementation of the Java system
and programming language.

We’ve been porting the OpenJDK implementation of Java to the new
AArch64 processor architecture for a while now, and it’s starting to
come together.

To explain where we are, I’ll first have to explain a few things about
how HotSpot (the OpenJDK virtual machine) works.  If you already know
all this please feel free to skip.

HotSpot has lots of everything: multiple Just-In-Time compilers,
multiple garbage collectors, and so on.  The parts we’re concerned
about when porting HotSpot are the Template Interpreter and the JIT
compilers, which are called C1 and C2.  (These are sometimes referred
to as the client compiler and the server compiler, but internally
they’re called C1 and C2, so that’s how I’ll refer to them.)

Once the Template Interpreter is done, you have a Java implementation.
It’ll be slow because everything is interpreted, but it’ll work.  We
passed this milestone a long time ago.  Since then we’ve been
concentrating on the C1 and C2 JITs.

C1 is done, modulo a few remaining bugs in corner cases.  These can
take a while to find, so it’ll be some while before we’re ready for
prime time, but I think we’re close.  If you’re feeling keen and you’d
like to kick the tyres you can go to and
install Fedora.

This runs using an AArch64 simulator; you don’t need any special

Then install the RPMs at and:

[aph@localhost ~]$ java -version
openjdk version “1.8.0-internal”
OpenJDK Runtime Environment (build 1.8.0-internal-0)
OpenJDK 64-Bit Client VM (build 25.0-b22-internal, mixed mode)
[aph@localhost ~]$ java Hello
Hello, World!

C2 is going to take longer.  We’re a fair way into the job and can

compile several hundred methods, but it’s nowhere near ready.  We’re
pretty sure it will be ready before AArch64-compatible hardware is
generally available, and that’s our goal.

If you want to explore AArch64 a bit more deeply, it’s easy to get
the source code via Mercurial:

We’re usually on line at #openjdk on and will answer
questions sent to the mailing lists at

Comments (and help) welcome!