个人随笔
目录
JVM(四)、堆垃圾回收过程浅析
2021-02-26 22:45:11

堆由年轻代和老年代组成,年轻代由Eden,From,To区组成,如下图:

步骤1

新建的对象一般是放在Eden区,但是Eden区经过一定的时间后会被放满,此时会触发minor gc,这此GC会把Eden区和Survivor区中的没有引用的对象进行垃圾回收,然后身剩下的有引用的对象会向From区移动。

步骤2

然后继续产生新的对象放入Eden中,当Eden中又被放满后,会同时对Eden和Survivor中的From区域同时进行minor gc,将Eden和From区的的无引用的对象清空,将Eden和From中还存活觉得对象全部移动到To区

步骤3

然后继续产生新的对象放入Eden中,当Eden中又被放满后,会同时对Eden和Survivor中的To区域同时进行minor gc,将Eden和To区的的无引用的对象清空,将Eden和To中还存活觉得对象全部移动到From区。

然后重复步骤2和3

步骤4

对象每经历一次minir gc对象的头中分代年龄会+1,当到达默认值15后最后会被移动到老年代。比如静态变量,线程池,spring容器中的bean都会一直存活被移动到老年代。

步骤5

当老年代也满了后,就会触发一次full gc,触发stop world.将程序中断,对整个堆甚至方法区进行垃圾回收,耗时时间比较长,所以尽量不要频繁的触发full gc

 379

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2