Difference between revisions of "XELK-AN-009: Comparing JVMs (Java Virtual Machines) on i.MX6 family processors"

From DAVE Developer's Wiki
Jump to: navigation, search
(List of test results)
Line 160: Line 160:
! Notes
! Notes
| Oracle JDK
| Oracle JDK 8
| 69.37
| 69.37
| 22673
| 22673
Line 181: Line 181:
| AdoptOpenJDK 11
| AdoptOpenJDK 11
| 82.39
| '''82.39'''
| 78111
| '''78111'''
| '''Top performance JVM'''
| LibericaJDK 11
| LibericaJDK 11
| 82.55
| '''82.55'''
| 77083
| '''77083'''
| '''Top performance JVM'''
| ZuluCommunity 11
| ZuluCommunity 11

Revision as of 21:05, 18 November 2019

Info Box
Axel-04.png Applies to Axel Ultra
Axel-02.png Applies to AXEL ESATTA
Axel-lite 02.png Applies to Axel Lite


This application note has been validated using the kit version in the History table.

History[edit | edit source]

Processor Date Kit version Notes
i.MX6 Cortex-A9 Nov 2019 XELK 4.0.0 i.MX6 DualLite SOC version
i.MX6UL Cortex-A7 Nov 2019 XUELK 2.0.3 i.MX6 Ultra Lite SOC version

Introduction[edit | edit source]

Nowadays the Java programming language is more and more used for creating embedded application taking advantages from the popular and powerful programming language like Java.

As well known, from wikipedia description:

Java is a general-purpose programming language that is class-based, object-oriented, and designed to have as few implementation dependencies as possible. It is intended to let application developers write once, run anywhere: Java code can run on all platforms that support Java without the need for recompilation.
Java applications are typically compiled to bytecode that can run on any Java virtual machine (JVM) regardless of the underlying computer architecture.

Java Virtual Machine[edit | edit source]

There are many different JVM that can run on ARM platform - like - let you to run your Java application on DAVE's Embedded platforms.

In this Application Note, we would like to explore some of the most popular Java Virtual Machines and measure their performances on the embedded platform. The different JVMs performance results let the user to target which JVM can be used for running its Java code in the better way.

ZeroVM[edit | edit source]

The ZeroVM JDK version has to be taken into account if used on some JVM: this version - used for example on OpenJDK 8 and AdoptOpenJDK 8 - gives output results really less performing then the others VMs.

It should be considered - infact - that OpenJDK Zero VM is an interpreter only JVM. It's easier to port because it has no architecture specific assembly code but, on the other hand, it's not performant because it has no architecture specific assembly code.

Benchmarks[edit | edit source]

Two standard Java code benchmark tools are used to compare the JVMs:

We have to comply to the proper license agreements in order to run the benchmarks:

  • SciMark: please read the credits page about National Institute of Standards and Technology (NIST) GPL license
  • CaffeineMark: please read carefully the license agreement for running the Pendragon Software's CaffeineMark ver. 3.0

Java Virtual Machines[edit | edit source]

The Java Virtual Machines listed below, have been selected from the main Java players in the market. Obviously the Oracle JDK is the reference one due to the original Java project started by Sun Microsystems and aquired by Oracle on 2010.

Licensing[edit | edit source]

Each JVM has a proper licensing model and this has to be taken into account:

  • Oracle: the Java license agreement should be accomplished in order to use and evaluate it
  • AdoptOpenJDK: the GPLv2 license is used for the OpenJDK code
  • Zulu: the Zulu Community version has free download and uses without restrictions
  • BellSoft: the Liberica JDK for Embedded is provided with no license restrictions

Virtual Machine version[edit | edit source]

Here below the list of JVMs compared in the tests and the download sites:

Java Virtual Machine JDK version VM version Notes
Oracle JDK 8u211 Java HotSpot(TM) Client VM (build 25.211-b12, mixed mode)
OpenJDK 1.8.0_102 OpenJDK Zero VM (build 25.102-b14, interpreted mode) ZeroVM
AdoptOpenJDK 1.8.0_232 OpenJDK Zero VM (AdoptOpenJDK)(build 25.232-b09, interpreted mode) ZeroVM
ZuluCommunity 8u232 OpenJDK Client VM (Zulu8.42.0.195-CA-linux_aarch32hf) (build 25.232-b195, mixed mode, Evaluation)
AdoptOpenJDK 11.0.5 OpenJDK Server VM AdoptOpenJDK (build 11.0.5+10, mixed mode)
LibericaJDK 11.0.5-BellSoft OpenJDK 32-Bit Server VM (build 11.0.5-BellSoft+11, mixed mode)
ZuluCommunity 11.0.4 OpenJDK Client VM Zulu11.33+21-CA (build 11.0.4+10-LTS, mixed mode)

Benchmarking results[edit | edit source]

The benchmarks have been run on the same platform and same cpu: the different JVMs was decompressed in the /home/root/java directory of the target and started manually.

Here below an example of SciMark benchmark started for OracleJDK:

root@imx6qxelk:~/java# ./jdk1.8.0_211/bin/java -cp ./scimark2lib.jar jnt.scimark2.commandline
SciMark 2.0a

Composite Score: 69.37463986126829
FFT (1024): 69.63592899407837
SOR (100x100):   123.68132332709474
Monte Carlo : 17.99165245491594
Sparse matmult (N=1000, nz=5000): 50.866191316811516
LU (100x100): 84.69810321344092

java.vendor: Oracle Corporation
java.version: 1.8.0_211
os.arch: arm
os.name: Linux
os.version: 4.9.11-xelk-4.0.0

Then, an example of Caffeine benchmark:

root@imx6qxelk:~/java/benchmark/Caffeine# ../../jdk1.8.0_211/bin/java CaffeineMarkEmbeddedApp
Sieve score = 12204 (98)
Loop score = 46042 (2017)
Logic score = 22955 (0
String score = 29983 (708)
Float score = 21900 (185)
Method score = 16041 (166650)
Overall score = 22673

List of test results[edit | edit source]

Java Virtual Machine SciMark (Composite Score) CaffeineMark (Overall score) Notes
Oracle JDK 8 69.37 22673
OpenJDK 8 3.62 605 The interpreted JVM version explains the very poor performance
AdoptOpenJDK 8 3.44 569 The interpreted JVM version explains the very poor performance
ZuluCommunity 8 69.14 17237
AdoptOpenJDK 11 82.39 78111
LibericaJDK 11 82.55 77083
ZuluCommunity 11 69.61 17060