[英]Java Process taking more and more memory
所有,
我有一个Java内存进程,随着时间的流逝,它开始占用越来越多的内存。 为了限制堆空间的使用,我将-Xmx选项设置为512M。 在一段时间内,进程内存使用量逐渐达到2GB。
我已经使用MAT和YOURKIT等各种工具分析了代码可能的内存泄漏,并且在Java代码中没有发现此类可能的内存泄漏。 该代码还利用了看起来没有泄漏的One Native函数。
我有以下问题:
感谢您的回答。
您如何衡量内存使用情况?
通常有3种内存使用情况:
虚拟内存大小可以变得比使用-Xmx指定的大小大(几个GB),但这不会造成任何危害。 RES plus SHR是您应该关注的。
除了堆之外,还有一类不受-Xmx(permgen)影响的内存使用情况。 但这通常上限为几MB。 您可能需要阅读《 HotSpot GC优化指南》 。
让我用完整的“响应”来增强我的“评论”。
如果您要进行大量的字符串操作,则绝对不应使用“ String”类。 无论发生什么情况,Java都有许多出色的工具(包括但不限于JConsole)可让您智能地分析问题。 您的两个新BFF应该是:
StringBuilder (有效地处理字符串)和
JConsole (研究程序的行为;包括堆分配和垃圾回收)。
而且,正如user643011正确指出的那样,还有很多其他事情可能会“泄漏”:包括文件未关闭,使用大量堆栈空间的大量线程等。
这是另一个很好的链接:
如果您怀疑Java应用程序中发生内存泄漏,则绝对应该尝试Plumbr 。 很不错,可以发现它们并给出非常有用的报告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.