5
public class MemoryLeakExample {
    public static void main(String[] args) {
        while (true) {
            System.gc();
        }
    }
}

该程序中的内存泄漏如何?通过 NETBEANS 分析器进行监视时,内存逐渐增加。如果我错了,请指导我,感谢任何帮助。 5 分钟之前使用的堆大小为:2257416 之后:2258360

谢谢你。

4

2 回答 2

11

我运行了这段代码:

final Runtime rt = Runtime.getRuntime();
long before = System.currentTimeMillis();
while (true) {
  System.gc();
  long now = System.currentTimeMillis();
  if (now - before > 1000) {
    System.out.println(rt.totalMemory() + " " + rt.freeMemory());
    before = now;
  }
}

它打印的数字是完全稳定的。在您的情况下,分析器本身正在使用分析数据占用内存。

于 2012-11-22T13:47:19.277 回答
5

通过 NETBEANS 分析器进行监视时,内存逐渐增加。

VisualVM 分析器使用内存进行分析。如果您执行内存分析,您可以看到使用的内存是发送到分析器的对象。

如果您使用商业分析器,例如 YourKit,它会将分析信​​息记录在本机内存中,因此不会影响堆的工作。

于 2012-11-22T13:54:45.363 回答