openj9简单测试

  • 270
  • 2021年12月21日14:22:13
  • 阅读模式

Eclipse OpenJ9 是一个 Java 虚拟机(JVM),它是运行 Java 应用程序的引擎,而 OpenJDK 是一个完整的开发工具包,包含其他组件,如Java 类库以及 JVM。默认情况下,OpenJDK 使用名为 Hotspot 的 JVM。简单地说,OpenJ9 是一个 JVM 替代方案,可将其作为 OpenJDK 二进制文件的一部分。

    而OpenJ9其自身是基于IBM开源的OMR项目所构建,OMR项目由一个高度集成的开放源码C和c++组件,可用于构建大量的语言,运行时支持许多不同的硬件和操作系统平台。这些组件包括但不限于:内存管理,线程处理,平台端口(抽象)库,诊断支持,监控支持,垃圾收集和本地实时编译。OMR的意图在于让实现语言的人能够重用IBM在Java运行时方面所投入的数百开发人年所取得的成果,能够受益的包含已有的语言如Ruby、Python、Javascript等等,它还能加快新语言的创建过程。

如果说hotspo是Java虚拟机「武林盟主」的话,那openj9可以称之为「天下第二」。早年IBM将之捐献给eclipse基金会,现在又拿了回来自己发展,大概是看到openj9的发展潜力了吧!

我们知道Java现在并不是很适合做微服务的场景,尽管有springcloud可以支撑微服务的架构的,但是Java语言缺有跟不上微服务的情况,例如:

1、Java太占用内存,在单体应用的话其实无可厚非,内存占用多些对运行效率也有好处,但是却不适合微服务的场景,如果每个小的微服务都占用不少内存,那就体现不出微的作用了。

2、Java编译慢,spring启动慢。spring作为Java必不可少的框架,大量运用了反射技术,牺牲了运行效率,我们知道反射的性能是非常差的,但是框架为了开发方便不得不做出这方面的牺牲。在即将到来的spring6里据说针对微服务有了很大的改进,但是spring6只支持java17,这意味着国内在几年内几乎很难用到生产环境上。

所以很多公司改用Go语言来替代Java编写微服务,Go语言本身编译快、并发性能好、占用内存少让他成为了微服务时代的热门语言,虽然语言本身较为简陋,目前版本连泛型都无,不适合做大型单体应用(这方面还是Java主流)。

最近在研究openj9虚拟机,相对于耳熟能详的hotspo来说可能不是很出名,但是在adoptopenjdk的伴随下也渐渐为人所知,我在体验后发现确实是非常好用,官方对openj9做了测试:

1)启动后的内存消耗


2)在负载压力平稳后的内存消耗


3)系统启动耗时

4)吞吐量

5)在CPU受限环境中的测试

测试结果显示,与Hotspot相比OpenJ9有如下的优势:

 1)启动时的内存占用大幅降低

 2)负载稳定后的内存占用大幅降低

3)启动时间增加

4)吞吐量相近

5)在CPU受限的环境中能更快的达到最大吞吐量

可以说真的很适合微服务的场景!

我自己也进行了一个简单的测试,针对开源项目若依,我将之打成jar包,然后用hotspot和openj9分别对内存占用进行对比(都是openjdk8u312)

hotspot:

启动时间:9.82s
内存占用:640.7m

openj9:

启动时间:13.064s
占用内存:168.2m

总结:根据测试,启动时间并没有缩短,反而增加了3s多,但是内存占用降低了4倍!

这只是一个简单的测试,但是不难看出hotspot和openj9的区别。

总结

在选用adoptOpenJDK的时候,可以选择hotspot版本,也可以选择openj9版本,如果你追求cpu计算的性能,以及稳定性考虑(毕竟hotspot都在用),可以选择hotspot,如果你打算尝鲜,或者内存吃紧,不妨尝试一下openj9.

注:公众号「崩天的勾玉」发送关键字「adopt」即可获取最新版AdoptOpenJDK下载地址,包括hotspot+openj9,大家可以自己下下来体验一把。

本文来自凡蜕博客(https://blog.ysboke.cn), 转载请带上地址.。
匿名

发表评论

匿名网友