【发布时间】:2014-02-18 01:00:16
【问题描述】:
我有一个 Java 应用程序正在运行,几个小时后它会填满内存。 我尝试使用 visualvm 检测内存泄漏,但它显示了错误的数据(不知道这是怎么发生的)。
在屏幕截图中,您可以看到任务管理器显示内存使用量为 700Mb,visualvm 显示为 225...
有人知道这里发生了什么吗?
问候
【问题讨论】:
-
如果发生内存泄漏设置 -XX:PermSize=256m -XX:MaxPermSize=256m 作为 VM 参数
-
@Vach 这看起来不像是内存泄漏...
-
@lakshman 这根本不能解决 PermGenSize 内存泄漏,它只是延迟了实际问题。更好的建议是提出一个框架,如果不再需要/使用它们,它实际上能够卸载类。然而,这需要智能类加载并进一步进行相当严格的处理(尤其是单例和枚举)
-
OFFTOP: 可以放大图片吗?
-
@Vach 我根本没有提到这些参数 - 我只是评论说它们不会解决问题,而不仅仅是延迟它。在我看来,发现内存泄漏的最佳方法是在给定 lakshman 提供的参数的情况下将给定内存减少到最低限度,然后使用分析器生成堆转储,然后您可以开始更详细地分析。为什么要减少内存?因为这将更快地强制 GC,并且您的问题可能会更早发生。此外,堆转储也不会占用太多磁盘空间。
标签: java memory-leaks profiling visualvm