-
Notifications
You must be signed in to change notification settings - Fork 89
有关内存占用的探索
昨日小睡 edited this page Nov 16, 2024
·
4 revisions
首先感谢 @王于舟 提供的解决方案
对于低性能机来说,往往因物理内存有限,无法支撑服务的部署。当内存占用接近jvm的最大内存时,程序就会疯狂GC,导致cpu过高。当内存占用超过jvm最大内存时,程序就会内存溢出。 @王于舟 提出使用Eclipse OpenJ9代替Oracle OpenJDK的方案,使内存占用大幅度减少,更加适合低性能机。
我尝试使用Eclipse OpenJ9代替Oracle OpenJDK后,对北斗项目进行编译、运行、打包都没有发现什么问题。所以对于北斗项目,Eclipse OpenJ9理应可以完美替代Oracle OpenJDK。
IBM Semeru OpenJDK 下载地址:https://developer.ibm.com/languages/java/semeru-runtimes/downloads/?mhsrc=ibmsearch_a&mhq=semeru
以下数据均在我本人的笔记本电脑上测试,结果仅供参考。
- CPU:Intel(R) Core(TM) i7-14650HX 2.20 GHz
- 内存:32.0 GB (31.7 GB 可用)
- 硬盘:YMTC PC411-1024GB-B
- 系统:Windows 11 家庭版 22H2
- 使用OpenJDK编译5次耗时:[11s 997ms, 12s 53ms, 11s 816ms, 11s 960ms, 11s 928ms],平均:11s 950ms
- 使用OpenJ9编译5次耗时:[12s 925ms, 13s 111ms, 12s 947ms, 12s 681ms, 12s 853ms],平均:12s 903ms
- 使用OpenJDK启动5次耗时:(springboot:[2.169s, 2.14s, 2.151s, 2.158s, 2.065s], 服务:[4.058s, 4.147s, 4.181s, 4.04s, 4.033s]),平均:springboot:2.136s,服务:4.091s
- 使用OpenJ9启动5次耗时:(springboot:[3.847s, 3.716s, 3.682s, 3.693s, 3.673s], 服务:[7.207s, 7.064s, 6.606s, 7.177s, 6.439s]),平均:springboot:3.722s,服务:6.898s
- 使用OpenJDK启动5次内存:[809.4MB, 846.7MB, 826.7MB, 785.2MB, 845.5MB],平均:822.7MB
- 使用OpenJ9启动5次内存:[501.5MB, 501.7MB, 488.4MB, 493.6MB, 497.5MB],平均:496.5MB
- 使用OpenJDK热启动5次耗时:[2.267s, 2.128s, 2.121s, 2.063s, 2.082s],平均:2.132s
- 使用OpenJ9热启动5次耗时:[3.733s, 3.7s, 2.961s, 3.086s, 2.944s],平均:3.284s
总体来说,OpenJ9相比OpenJDK在内存占用方面提升巨大,但是在启动时间和执行速度这一方面稍弱。对于低性能机来说,使用OpenJ9替换OpenJDK无疑是非常划算。用少许时间成本换取大量的内存占用减少,性价比颇高。如果本身机器性能不差,或者是对执行速度有要求的,就没必要进行替换。
另一篇网络文章参考,结论基本和我总结的一致:https://dbaplus.cn/news-134-6328-1.html