【发布时间】:2011-01-03 00:42:22
【问题描述】:
我有一个正在运行的 java webapp,我正在使用 visualVM 进行监控。
这是堆的图表:
使用两组请求进行了测试,一组在 3:20,另一组在 4:40 aprox(它们在图中表示为仅有的两个峰值)。
我的问题是:这是否意味着我有内存泄漏?我担心中间部分,虽然 GC 运行,但堆始终保持在 250MB。
非常感谢您的见解。
【问题讨论】:
-
样本大小为 2 并不能真正提供足够的信息来声明泄漏。是的,可以在该图中隐藏一个:最右边的分配大小大于最左边的大小。或者,正如 binil 所提到的,只是一些对象被提升到了终身代,而你没有一个主要的 GC。
-
真的,确定是否存在泄漏的唯一方法是比较随时间保留的活动对象的数量。我已经发布了一篇文章(这里)(kdgregory.com/index.php?page=java.outOfMemory),讨论了如何分析堆转储。
标签: java memory-management memory-leaks profiling