最近做的 《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 的效果很好,其实开发难度不大,只是略麻烦些,建议更多的人尝试。
附测试视频(一镜到底):