1)我们运行的是Spring Boot / Java 8应用程序 xms = 256 MB,xmx = 2 GB
2)我们的发布工程师在unix服务器上运行 TOP 命令 应用程序正在运行,并且正在报告该应用程序正在使用 3.5 GB
3)当我使用 VisualVM 分析应用程序的生产JVM实例时, 我看到使用的堆大小仅显示 1.4 GB
关于为什么内存消费数量在上面的#2和#3之间如此不同的任何想法?
感谢您的反馈。
答案 0 :(得分:1)
-Xmx
参数仅设置Java 堆的最大大小。 Java堆外的任何内存都不受-Xmx
的限制/控制。
非堆内存使用的示例包括线程堆栈,直接内存和perm gen。
使用的总虚拟内存(由top
报告)是堆使用量(使用-Xmx
限制)和非堆使用量(不能被{{1限制)的总和}})。
因此,#2和#3中的数字不具有可比性,因为它们不是同一事物的测量值。
它们将永远不会相同但如果你想让它们彼此更接近(或者至少可以控制所使用的虚拟内存量),那么你可以考虑使用...
-Xmx
限制perm gen size -XX:MaxPermSize
以促进更积极的堆缩减