我是trying to use JConsole to see if I have a memory leak但不知道要寻找什么。如果我不得不猜测,尽管垃圾回收,内存使用量应该总是上升,如下所示:
正如您在我的另一个 SO 问题中所看到的,我看到了一个锯齿状边缘,内存使用量会上升(即使浏览器已关闭并且没有请求到达我的本地 Tomcat 服务器),然后就会下降。
Java 中的内存泄漏在 JConsole 中“看起来像什么”?
最佳答案
我认为了解内存泄漏的最好方法是做一个实验。尝试这样的方法来创建内存泄漏:
Collection<Object> data = new LinkedList<>();
while(true) {
long[] canBeGarbageCollected = new long[10000];
long[] canNotBeGarbageCollected = new long[100];
data.add(Arrays.asList(canNotBeGarbageCollected));
}
除了 JConsole 之外,您还可以使用 VisualVM,它有一个不错的插件,名为“Visual GC”。具有飞行记录功能的 Java Mission Control 可以为您提供很多详细信息。命令行上也存在一个非常强大的工具:
jstat -gcutil -h20 $PID 1000
这将表明内存泄漏最终将导致 100% 旧空间利用率 (O),并且 CPU 将花费越来越多的时间进行完整垃圾收集 (FGCT)
关于java - JConsole 中的内存泄漏是什么样子的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32725007/