一般认为现在主机的内存都很大,精细的控制进程的内存占用的意义不大,但是现在随着微服务的流行,docker部署方式的采用,这一方面问题又开始越来越重要,特别在java 8 和java 9 的年代,Hotspot与cgroup适配存在问题,导致Hotspot会占用较多不需要的内存,而openJ9的在这方面做出了巨大的提升,从而使java程序能更适应云化的趋势。
下面这张图是openJ9官方的一个内存测试比较结果

而至于为什么openJ9能将内存控制的比较精确,目前我还没有找到相关的资料说明,看来openj9还是的确太新了,至于在docker容器中的内存占用,应该是与cgroup配合的较好,能感知自身的运行环境是在容器中,这样能促使它选择更有的内存使用策略
网友评论