为什么带有Thread.Sleep的Helloj上的Intellij堆内存泄漏?

时间:2018-09-15 14:23:12

标签: java intellij-idea memory-leaks jconsole

我注意到其他程序上的堆内存使用量正在增加, 所以我做了一个简单的程序,看看JConsole是否在简单的HelloWorld应用程序上报告了相同的内容。我在循环中添加了Thread.sleep(),以使应用程序保持活动状态以进行测试。

此问题的根源是什么?我应该担心吗?

此图显示了我的测试设置:

enter image description here

这是我用于测试的代码:

public class Main {
public static void main(String[] args) {
    System.out.println("Hello World!");
    while(true)
    {
        try {
            System.out.print("Sleeping...");
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Working");
    }
}
}

此图显示堆内存在15分钟内增加了一倍:

enter image description here

25分钟后,我确实看到了回收的内存,但是从那里继续出现相同的泄漏:

enter image description here

这仅仅是intellij的行为方式吗?回收的内存足以说明这不是泄漏吗?

注意:系统是MacBook Pro 2.8GHz 16 GB上的macOS High Sierra。 IntelliJ Ultimate 2018.2。

1 个答案:

答案 0 :(得分:1)

就像雅各布建议的那样,这完全正常。

正如Peter所建议的那样,我使用Java Mission Control进行了测试,并验证了连续垃圾回收之后的堆内存是相当稳定的(如果我可以将鼠标悬停在这些低点上以获得确切的值,那就太好了。)

我仍然担心如此小的测试程序会定期分配140MB。我原本期望的东西要低得多。

这是JMC屏幕截图,其中包含以下发现:

enter image description here