全,
我有一个Java内存进程,随着时间的推移,它开始占用越来越多的内存。为了对堆空间的使用设置上限,我将-Xmx选项设置为512 m。慢慢地,经过一段时间,进程内存的使用量达到了2GB。
我使用MAT和YOURKIT等各种工具分析了可能发生内存泄漏的代码,在Java代码中没有发现这种可能的泄漏。代码还使用了一个看起来没有泄漏的本机函数。
我有以下问题:
谢谢你的回答。
发布于 2012-09-24 07:38:11
你是如何测量内存使用情况的?
通常有三种内存使用方式:
虚拟内存大小可以比用-Xmx指定的更大(几GB),但这不会造成任何损害。再加上SHR是你应该看到的。
除了堆之外,还有另一类内存使用不受-Xmx (permgen)的影响。但这通常被限制在几MB。您可能需要阅读HotSpot GC调谐指南。
发布于 2012-09-24 19:59:52
让我用一个完整的“回应”来补充我的“评论”。
如果您正在执行大量的字符串操作,则绝对不应该使用" string“类。不管发生什么,Java都有许多很棒的工具(包括但不限于JConsole),它们可以让您智能地分析问题。您的两个新BFFs应该是:
而且,正如user643011正确指出的那样,还有许多其他的事情可以想象为“泄漏”:包括未关闭的文件、使用大量堆栈空间的大量线程等等。
下面是另一个很好的链接:
发布于 2012-10-01 13:02:39
如果您怀疑java应用程序中的内存泄漏,那么一定要尝试普朗布尔。这是相当好和发现他们,并给出相当有用的报告。
https://stackoverflow.com/questions/12560612
复制相似问题