主要分为下面2个阶段
优点:实现简单,只需要在第一阶段给每个对象维护标志位,第二阶段删除对象即可
缺点:
也叫标记压缩算法,是对标记清理算法中容易产生垃圾碎片问题的一种解决方法
主要分为2个阶段
将存活对象移动到堆的一端
,清理掉存活对象的内存空间
分代回收时,创建出来的对象,首先会被放入到Eden伊甸园区。
随着对象在Eden区越来越多,新创建的对象已经无法放入,就会触发年轻代的GC,称为Minor GC或者Young GC
Minor GC会把Eden区和From区中需要回收的对象进行回收,把没有回收的对象放入到To区中,这样子,新创建的对象就能分到Eden区了
接下来,S0区会变成To区,S1区会变成From区。
当Eden区满的时候 再向里面放入对象,仍然会发送Minor GC
此时会回收Eden区和S1区的对象,并把Eden区和S1区中存活的对象放入到S0
注意:每次Monor GC中都会记录它的年龄,初始值为0,每次GC完后加1
如果Minor GC后的对象年龄达到阈值(最大15,默认值和垃圾回收器有关),会晋升到老年代中
如果老年代的空间不足,无法放入新的对象,先尝试Minor GC
如果还是不足,就会触发Full GC,Full GC会对整个堆进行垃圾回收
如果Full GC仍然无法回收掉老年代的对象,那么当对象继续放入到老年代的时候,就会抛出Out Of Memory异常
在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!