1.评测的目的
通过评测,掌握基于ARM64架构下,开源OpenJDK与商用Oracle JDK的各自性能特点,以及两者间性能差异,从而为JDK选择提供数据支撑,及后期JDK优化、自主研发提供良好参考。
2.设备相关信息2.1硬件设备信息表2-1 测试所用硬件信息 处理器
| ARM处理器鲲鹏920
| 处理器数量
| 8
| 内存大小
| 8192 MB(8GB)
| 硬盘大小
| 80 GB
| 操作系统
| Linux version 4.4.58-20180615.kylin.server.YUN+-generic (YHKYLIN-OS@Kylin) (gcc version 7.2.0 (Debian 7.2.0-3) ) #kylin SMP Tue Jul 10 14:55:31 CST 2018 |
2.2软件信息(1) OpenJDK:
openjdk version "1.8.0_151"(即JDK8,最新为JDK9)
OpenJDK Runtime Environment (build1.8.0_151-8u151-b12-0kord0.16.04.2k1-b12) OpenJDK 64-Bit Server VM (build 25.151-b12, mixedmode)
(2) OracleJDK:
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build1.8.0_221-b11) Java HotSpot(TM) 64-Bit Server VM (build25.221-b11, mixed mode)
(3)所用基准测试套件:SPECjvm2008
SPECjvm2008作为SPEC(Standard Performance EvaluationCorporation)的测试套件,包含较为全面的核心java功能测试,主要关注执行单个应用程序的JRE的性能;它还可以在执行JRE的上下文中测量操作系统和硬件的性能,是较为权威的测试套件。
图2-1 JDK、JRE、JVM间关系 JRE包含了JVM、java核心类、和支持文件,不含编译器、调试器和其他工具,通过对JRE性能的测试,能够有效反应JDK的性能。 用例.pdf表2-2 SPECjvm2008测试用例列表:(单位 ops/m 每分钟操作数) 3.测试与结果
3.1背景知识:JVM类执行机制JVM执行字节码有两种方式:解释模式(interpreter)和编译模式(jit)(JIT即时编译(Just In Time))。 图3-1 JVM 类执行机制 解释器将每个Java指令都转译成对等的微处理器指令,并根据转译后的指令先后次序依序执行,由于一个Java指令可能被转译成十几或数十几个对等的微处理器指令,这种模式执行的速度相当缓慢。Sun公司为了解决解释器的执行慢的问题,引入了JIT技术。JIT针对一个具体的class进行编译,经过编译后的程序,被优化成相当精简的原生型指令码。 3.2测试方法根据JVM的执行机制特点进行测试。 首先对比测试启动性能,且对jvm不做任何修改。由于编译问题,startup.compiler.sunflow编译失败,将该测试从specjvm.benchmarks(即基准测试)参数中剔除。 再进行执行性能测试,设定预热时间为60s,预热后执行时间为60s,其余参数均设为默认,对jvm不做任何修改。即改动参数如下: specjvm.benchmark.warmup.time=60s //设置预热时间60s specjvm.iteration.time=60s //设置迭代时长60s 3.3 测试结果3.3.1启动性能测试结果单次测试结果如下。 表3-1 启动性能单次测试(ops/m) 图3-2 各个用例启折线图 从单次测试中各个用例测试结果情况来看,openJDK优于oracleJDK,为方便更好得出性能整体优劣情况,进行多次测试,对比SPECjvm2008综合结果。 表3-2 三次测试综合结果(ops/m) 图3-3 三次测试综合结果折线图 从中可以看出JDK重复测试时整体性能表现变化不大,表现较为平稳。而且其中openJDK优于oracleJDK,快20%-25%。 3.3.2执行性能测试结果在规定时间内,按照顺序多线程多次迭代测试用例结果如下所示: 表3-3 执行性能单次测试(ops/m)(ops/m) 图3-4 各个用例启折线图 从上数据中可以看出,各个用例测试结果中openJDK除了sunflow (图片渲染性能)比oracleJDK差外,其他性能都优于oracleJDK,其中crypto(加解密算法性能)是oracleJDK的2倍多。 再进行多次重复测试,对比SPECjvm2008综合结果如下。 图3-5 各个用例启折线图 从中可以看出JDK重复测试时整体性能表现变化不大,表现较为平稳。而且其中openJDK优于oracleJDK,快10%-20%。 结合两个实验的结果,可以得出,在ARM架构下,openJDK性能优于OracleJDK性能,综合快10%-20%。这与《在2017年末,Oracle JDK和OpenJDK的性能差差异有吗?》(https://qiita.com/ukiuni@github/items/5bb523c31bb4b4f9a278)一篇博文中,利用测试代码测试1000次CRUD (crud指做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)) 而得出的结论相近:在arm机器上OpenJDK快。
|