我编写了一个简单的程序,并使用jconsole.exe来监控其堆大小。
public class HeapTest {
public static void main(String[] args) {
while(true) {
}
}
}
结果如下
我不明白为什么堆大小会不断增长。我不是新的()我的程序中的任何对象。
我的程序中使用的堆是什么?
我没有向jconsole.exe添加任何其他参数;只需双击它,然后根据PID加载java进程。
环境:Windows 7下的Java 1.8.0_25
答案 0 :(得分:4)
这里没有内存泄漏。也在OSX中复制它。它将保存由VM正常运行产生的数据,包括GC的数据。 eden上升,一旦GC发生,堆(eden)使用的内存减少,循环再次开始。
令人困惑的是,程序没有明确地创建任何对象,但有理由说明JVM会这样做,因此逐渐增加伊甸园空间直到下一个GC。
答案 1 :(得分:0)
您可以使用JConsole替代命令jmap monitor java进程,并且发现Java堆大小是固定的。
答案 2 :(得分:0)
您假设main()是您唯一的线程,这是一个错误的假设。还有其他线程将分配对象