为什么JVM堆不断增长?

我编写了一个简单的程序并使用jconsole.exe来监视其堆大小。

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

这是结果 在此处输入图像描述

我不明白为什么堆大小不断增长。 我的程序中没有new()任何Object。

我的程序中使用的堆是什么?

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

环境:Windows 7下的Java 1.8.0_25

这里没有内存泄漏。 也在OSX中复制它。 它将保存由VM正常运行产生的数据,包括GC的数据。 eden上升,一旦GC发生,堆(eden)使用的内存减少,循环再次开始。

令人困惑的方面是程序没有明确地创建对象,但是有理由说明JVM会这样做,因此逐渐增加伊甸园空间直到下一个GC。

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