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

问题描述 投票:1回答:1

我注意到其他程序的堆内存使用量正在增加,所以我创建了这个简单的程序,看看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。

java intellij-idea memory-leaks jconsole
1个回答
1
投票

正如雅各布所说,这是完全正常的。

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

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

以下是JMC截图:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.