为什么 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( ) 是您唯一的线程,这是一个错误的假设。还有其他线程会分配对象
我写了一个简单的程序,用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( ) 是您唯一的线程,这是一个错误的假设。还有其他线程会分配对象