RT
目前使用 Java17 ,使用 ZGC ,通过 TOP 命令看到的 Java 进程占用内存会是实际使用内存的三倍。这种情况虽然不影响程序的实际运行,但是对监控运维很有影响,并且由于这种情况,以前一个机器能跑三个 Java 程序的,现在只能跑一个了。
关于为啥会占用三倍的问题,是由于 ZGC 内存映射实现导致的,可以看下这两个: https://www.zhihu.com/question/356585590/answer/1654398037
https://stackoverflow.com/questions/57899020/zgc-max-heap-size-exceed-physical-memory
ZGC 的官方说明是 8M -> 16T 的堆都可以使用 ZGC
Handle heaps ranging from a 8MB to 16TB in size
https://wiki.openjdk.org/display/zgc/Main
这本范围说明,基本任何情况都可以使用 ZGC ,并不存在只有大堆使用。
但是如果内存三倍问题不解决的话,还是没法用的。
这个问题,大家有什么解决办法?