jvm中所使用堆大小为什么会不断变化
写了一个main方法,让其sleep,然后用jvisualvm看jvm的使用情况,发现所使用的堆大小总是不断变化,像锯齿状,main方法:
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
请问是什么原因是堆的大小不断增大,我在main方法里并没有创建对象啊? --------------------编程问答-------------------- new Thread本身就是个对象吧 --------------------编程问答-------------------- 学习了。。。 --------------------编程问答-------------------- 有无限个try,catch,thread...然后jvm要回收他们啊. --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 你这没有循环 程序一下不就停了 哪来这个图? --------------------编程问答-------------------- 根据这图,肯定是在堆中不停的有对象创建,然后被GC
而你的程序并没有进行new操作(异常处理应该是和方法区和栈帧中吧?)
可能是JVM内部的一些操作导致的吧,为证明这个问题,可以看看关掉这个程序,堆变化如何 --------------------编程问答--------------------
说错了,关掉就没法监控,你写一个什么也不做的死循环,看看 --------------------编程问答--------------------
我这个死循环也是什么都没做啊,只是让它睡眠了而已。
我觉得你说的“JVM内部的一些操作导致”分析的挺靠谱的
补充:Java , Java SE