new出来的对象会放到堆空间的Eden区中。
老年的默认站整个堆空间的三分之二大小,年轻代占三分之一。其中Eden区占年轻代的十分之八,From和To各占十分之一。
当Eden区放满之后,JVM的执行引擎会触发垃圾收集的线程,会使用minor gc做垃圾收集,收集无效的对象。之后还有引用的对象会被移动到Survivo区,且对象(分代)年龄加一(对象年龄也记录在对象头中)。
当Survivo区被放满后也会触发minor gc,会将From区的无效对象回收,有效对象移动到To区,对象年龄加一,之后Eden区满后会将有效对象移动到To区。之后To区满了会再次将有效对象移动到From区,然后循环。(注:Survivo区使用了垃圾回收的复制算法)
当对象年龄达到15,会被移动到老年代。
使用jvisualvm可以能够监控线程,内存情况,查看方法的CPU时间和内存中的对 象,已被GC的对象,反向查看分配的堆栈,使用插件visual Gc可以查看:
GC Root根节点
类加载器,Thread,虚拟机的本地变量表,static成员,常量引用,本地方法栈的变量等