为什么 Intellij 堆内存在 Thread.Sleep 的 Hello World 上泄漏?

Why does Intellij Heap Memory Leak on Hello World with Thread.Sleep?

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

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

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

这是我用于测试的代码:

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 分钟内翻了一番:

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

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

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

正如 Jacob 所建议的,这是完全正常的。

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

我仍然担心这么小的测试程序定期分配140MB。我本来期望的东西要低得多。

这是 JMC 的截图和调查结果: