我正在使用JProfiler分析部署在Jetty服务器上的Java应用程序。 一段时间后,我得到了这个内存遥测数据: 右侧是Windows任务管理器中此Java进程的总内存。 我看到JProfiler中已提交内存定期增加,尽管大多数时候,大部分内存都是空闲的(绿色)。为什么已提交内存会像这样增加? 在上面的图像中,JProfiler中的已提交内存显示为3.17GB,但Windows任务管理器显示更高 - 4.2457 GB。他们不是都显示相同的内存吗?造成这种差异的可能原因是什么?
如果峰值内存使用接近总承诺内存大小,只要您的-Xmx值允许,JVM将增加已承诺的内存(实际由操作系统为进程保留的内存)。这有点像填充ArrayList。当后备数组用尽时,它会以越来越大的步长扩大,以便每次插入不必重新调整大小。至于任务管理器和JVM堆大小之间的差异,任务管理器中的内存始终大于堆大小,并且通常难以解释。请参见此处以了解不同度量的解释: https://technet.microsoft.com/en-us/library/ff382715.aspx