为什么JVM堆不断增长?

时间:2015-02-24 06:09:04

标签: java heap-memory

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

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

结果如下 enter image description here

我不明白为什么堆大小会不断增长。我不是新的()我的程序中的任何对象。

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

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

环境:Windows 7下的Java 1.8.0_25

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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