分析 JVM:已提交内存、已使用内存和空闲内存

For*_*ick 5 java profiling jvm memory-leaks jprofiler

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

过了一会儿,我得到了这个内存遥测: 在此处输入图片说明

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

  1. 我看到 JProfiler 中承诺内存的周期性增加,尽管大多数时候,大部分内存是空闲的(绿色)。为什么提交的内存会这样增加?
  2. 在拍摄上图的时间点,JProfiler 中的 Committed Memory 显示为 3.17GB,但 Windows 任务管理器显示更高 - 4.2457 GB。这不是他们俩显示的相同记忆吗?这种差异的原因可能是什么?

Ing*_*gel 9

如果峰值内存使用量接近总提交内存大小,JVM 将增加提交内存(操作系统实际为进程保留的内存),只要您的 -Xmx 值允许。

这有点像填充一个 ArrayList。当支持阵列用完时,它会以越来越大的步长扩大,因此不必为每个插入调整其大小。

至于任务管理器和JVM堆大小的区别,任务管理器中的内存总是大于堆大小,一般很难解释。有关不同措施的说明,请参见此处:

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