对JVM进行性能分析:已提交,已使用,已释放内存

时间:2018-06-21 10:13:28

标签: java memory-leaks jvm profiling jprofiler

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

过一会儿,我得到了内存遥测: enter image description here

右侧是Windows Task Manager上此Java进程的总内存。

  1. 我看到JProfiler中的Committed Memory定期增加,尽管在大多数情况下,该内存中的大部分都是Free(绿色)。为什么提交的内存会像这样增加?
  2. 在拍摄上图的时间点中,JProfiler中的“承诺内存”显示为3.17GB,但Windows Task Manager显示的则更高-4.2457 GB。两者都显示出相同的记忆吗?造成这种差异的原因可能是什么?

1 个答案:

答案 0 :(得分:3)

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

这有点像填充ArrayList。当后备阵列用尽时,它会以越来越大的步伐扩大,因此不必为每个插入物调整大小。

关于任务管理器和JVM的堆大小之间的差异,任务管理器中的内存总是大于堆大小,并且通常很难解释。请参阅此处以了解不同措施的说明:

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