当前位置:编程学习 > JAVA >>

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内部的一些操作导致的吧,为证明这个问题,可以看看关掉这个程序,堆变化如何 --------------------编程问答--------------------
引用 6 楼 gaobaiy 的回复:
根据这图,肯定是在堆中不停的有对象创建,然后被GC
而你的程序并没有进行new操作(异常处理应该是和方法区和栈帧中吧?)
可能是JVM内部的一些操作导致的吧,为证明这个问题,可以看看关掉这个程序,堆变化如何

说错了,关掉就没法监控,你写一个什么也不做的死循环,看看 --------------------编程问答--------------------
引用 6 楼 gaobaiy 的回复:
根据这图,肯定是在堆中不停的有对象创建,然后被GC
而你的程序并没有进行new操作(异常处理应该是和方法区和栈帧中吧?)
可能是JVM内部的一些操作导致的吧,为证明这个问题,可以看看关掉这个程序,堆变化如何

我这个死循环也是什么都没做啊,只是让它睡眠了而已。
我觉得你说的“JVM内部的一些操作导致”分析的挺靠谱的
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,