为什么 JVM 堆不断增长?

Why does JVM heap keep growing?

我写了一个简单的程序,用jconsole.exe来监控它的堆大小。

public class HeapTest {
    public static void main(String[] args) {
        while(true) {
        }
    }
}

这是结果

我不明白为什么堆大小一直在增长。我的程序中没有 new() 任何对象。

我的程序中堆有什么用?

我没有向 jconsole.exe 添加任何额外的参数;双击它,然后根据PID加载java进程。

环境:Java 1.8.0_25 在 windows 7

这里没有内存泄漏。也在 OSX 中复制了它。这将是 VM 正常运行时生成的簿记数据,包括 GC 的数据。 eden上升,一旦发生GC,堆(eden)使用的内存减少,重新开始循环。

令人困惑的方面是程序没有显式创建对象,但解释 JVM 会这样做是有意义的,因此伊甸园 space 逐渐增加直到下一次 GC .

可以使用JConsole替代命令jmap监控java进程,可以发现java堆大小是固定的。

您假设 main( ) 是您唯一的线程,这是一个错误的假设。还有其他线程会分配对象