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 ,并不存在只有大堆使用。
但是如果内存三倍问题不解决的话,还是没法用的。
这个问题,大家有什么解决办法?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.