分析 JVM:提交内存、使用内存和空闲内存
Profiling JVM: Committed vs Used vs free Memory
我正在使用 JProfiler 分析部署到 Jetty 服务器的 Java 应用程序。
过了一会儿,我得到了这个内存遥测:
右侧是Java进程在Windows任务管理器上的总内存。
- 我看到 JProfiler 中提交内存的周期性增加,尽管大多数时候,大部分内存是空闲的(绿色)。为什么提交的内存会增加成这样?
- 在拍摄上图的时间点,JProfiler 中的 Committed Memory 显示 3.17GB,但 WindowsTask Manager 显示更高 - 4.2457 GB。这不就是他们俩展现的一样的记忆吗?造成这种差异的原因可能是什么?
如果峰值内存使用量接近总提交内存大小,只要您的 -Xmx 值,JVM 就会增加提交内存(OS 实际为进程保留的内存)允许。
这有点像填充 ArrayList。当支持数组用完时,它会以越来越大的步长扩大,这样就不必为每次插入调整大小。
至于任务管理器和JVM堆大小的区别,任务管理器中的内存总是大于堆大小,一般很难理解。有关不同措施的解释,请参阅此处:
我正在使用 JProfiler 分析部署到 Jetty 服务器的 Java 应用程序。
过了一会儿,我得到了这个内存遥测:
右侧是Java进程在Windows任务管理器上的总内存。
- 我看到 JProfiler 中提交内存的周期性增加,尽管大多数时候,大部分内存是空闲的(绿色)。为什么提交的内存会增加成这样?
- 在拍摄上图的时间点,JProfiler 中的 Committed Memory 显示 3.17GB,但 WindowsTask Manager 显示更高 - 4.2457 GB。这不就是他们俩展现的一样的记忆吗?造成这种差异的原因可能是什么?
如果峰值内存使用量接近总提交内存大小,只要您的 -Xmx 值,JVM 就会增加提交内存(OS 实际为进程保留的内存)允许。
这有点像填充 ArrayList。当支持数组用完时,它会以越来越大的步长扩大,这样就不必为每次插入调整大小。
至于任务管理器和JVM堆大小的区别,任务管理器中的内存总是大于堆大小,一般很难理解。有关不同措施的解释,请参阅此处: