Java Native-OpenJ9-HotSpot (solon) 与 Go (gin) 对比测试
最近做的 《Java(solon) -VS- Go(gin) 之内存与并发测试》 在 bilibili 和 头条 的播放量还不错,就有人想看各种不同的测试:
- 有人希望添加 rust 的测试
- 有人希望多加几个不同的 go 框架试试
- 有人想添加 spring 和 springboot 的测试
- 有人想看看 java native 原生编译的对比
- 也有人想加入 c# 和 .net core的对比测试
- 还有人想添加 php 的对比测试
得慢慢来了......这次是对 java 的几种不同运行时做对比测试:
- Java Native (就是 GraalVM Native Image 的运行方式)
- Java OpenJ9
- Java HotSpot
上次有人说我 macbook 性能太差了,这个没经费啊:)这次我们还是参考 techempower plaintext 的场景测试:
本次测试结果如下:
| 项目 | java-hotSpot (solon) | java-openj9 (solon) | java-native (solon) | go (gin) | 备注 |
|---|---|---|---|---|---|
| 运行时 | java 17(openjdk) | java 17(openj9) | java 17(graalvm ce) | go 19.3 | |
| 操作系统 | mac 14.3 | mac 14.3 | mac 14.3 | mac 14.3 | 同机 |
| 硬件 | macbook pro 2020 | macbook pro 2020 | macbook pro 2020 | macbook pro 2020 | 同机 |
| 测试前状态/内存 | 64.3Mb | 51.5Mb | 17.3Mb | 5.7Mb | |
| 测试后状态/内存 | 387.4Mb | 111Mb | 55Mb | 13.9Mb | |
| 测试后状态/并发 | 13.5万 | 14.8万 | 11.5万 | 11万 |
测试评语:
本次我们主要是测试 Java 不同运行时的情况,Go 是做为一个基准参考。总体来讲 Java 项目的包体积越大(即 jar 打包后的大小),它的初始内存就会越大。这次测试 java 项目引入的包比之前多,初始内存也变多了。
| 运行时 | 内存效果 | 评语 |
|---|---|---|
| Java Native | 省 75% 左右 | 内存平稳,有点像 Go。但是 QPS 好像略降了一点点 |
| Java OpenJ9 | 省 50% 左右 | 内存有很大的波动,收缩的效果很好。QPS 正常 |
| Java HotSpot | 内存高,且收缩效果不好。QPS 正常 |
QPS 偶尔有波动也正常,Java HotSpot 在我这儿有时候能到 17 万。真不知道这有什么规律?另外,Java Native 的效果很好,其实开发难度不大,只是略麻烦些,建议更多的人尝试。