分析JVM:已分配内存 vs 已使用内存 vs 空闲内存

5

我正在使用JProfiler分析部署在Jetty服务器上的Java应用程序。

一段时间后,我得到了这个内存遥测数据:enter image description here

右侧是Windows任务管理器中此Java进程的总内存。

  1. 我看到JProfiler中已提交内存定期增加,尽管大多数时候,大部分内存都是空闲的(绿色)。为什么已提交内存会像这样增加?
  2. 在上面的图像中,JProfiler中的已提交内存显示为3.17GB,但Windows任务管理器显示更高 - 4.2457 GB。他们不是都显示相同的内存吗?造成这种差异的可能原因是什么?

5
任务管理器不知道“堆内存”的具体情况,它只会显示总内存、堆、栈、代码、非堆数据、缓冲区等信息。 - Holger
1
JVM需要内存来完成除堆以外的许多其他任务。 - Peter Lawrey
1个回答

9
如果峰值内存使用接近总承诺内存大小,只要您的-Xmx值允许,JVM将增加已承诺的内存(实际由操作系统为进程保留的内存)。
这有点像填充ArrayList。当后备数组用尽时,它会以越来越大的步长扩大,以便每次插入不必重新调整大小。
至于任务管理器和JVM堆大小之间的差异,任务管理器中的内存始终大于堆大小,并且通常难以解释。请参见此处以了解不同度量的解释:

https://technet.microsoft.com/en-us/library/ff382715.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接