2026/2/8 14:58:01
网站建设
项目流程
织梦网站背景,梧州网站建设梧州,asp.net开发网站好不好,哪个网站做ic好垃圾回收那些事#xff09;垃圾回收的算法标记清除算法流程优点#xff1a;实现简单缺点#xff1a;标记复制算法流程优点缺点标记整理算法#xff08;标记压缩算法#xff09;优点缺点分代GC算法内存划分为什么要分为 Young 区和老年代垃圾回收的算法
常见的是下面这四种…垃圾回收那些事垃圾回收的算法标记清除算法流程优点实现简单缺点标记复制算法流程优点缺点标记整理算法标记压缩算法优点缺点分代GC算法内存划分为什么要分为 Young 区和老年代垃圾回收的算法常见的是下面这四种标记清除算法复制算法标记整理算法分代GC算法分别介绍一下标记清除算法流程首先标记出所有需要回收的对象在标记完成后统一回收掉所有被标记的对象也可以反过来标记存活的对象统一回收所有未被标记的对象 。优点实现简单缺点第一个是执行效率不稳定如果Java堆中包含大量对象而且其中大部分是需要被回收的这时必须进行大量标记和清除的动作导致标记和清除两个过 程的执行效率都随对象数量增长而降低第二个是内存空间的碎片化问题标记、清除之后会产生大 量不连续的内存碎片空间碎片太多可能会导致当以后在程序运行过程中需要分配较大对象时无法找 到足够的连续内存而不得不提前触发另一次垃圾收集动作。分配速度慢标记复制算法流程它将可用 内存按容量划分为大小相等的两块每次只使用其中的一块。当这一块的内存用完了就将还存活着 的对象复制到另外一块上面然后再把已使用过的内存空间一次清理掉。优点吞吐量高只需要遍历一次存货对象复制到另一块内存上即可不会发生碎片化缺点将可用内存缩小为了原来的一半标记整理算法标记压缩算法其中的标记过程仍然与“标记-清除”算法一样但后续步骤不是直接对可 回收对象进行清理而是让所有存活的对象都向内存空间一端移动然后直接清理掉边界以外的内 存。优点内存使用率高不会碎片化缺点效率不高如果移动存活对象尤其是在老年代这种每次回收都有大量对象存活区域移动存活对象并更新 所有引用这些对象的地方将会是一种极为负重的操作而且这种对象移动操作必须全程暂停用户应用 程序才能进行[1]这就更加让使用者不得不小心翼翼地权衡其弊端了还有一种“和稀泥式”解决方案可以不在内存分配和访问上增加太大额外负担做法是让虚 拟机平时多数时间都采用标记-清除算法暂时容忍内存碎片的存在直到内存空间的碎片化程度已经 大到影响对象分配时再采用标记-整理算法收集一次以获得规整的内存空间。分代GC算法内存划分年轻代 Young 区Eden 区 SOform,S1(to)[ 幸存者区 ] 复制清理算法老年区新产生的对象会被放在 eden 区和 from 区每一次进行 minor GC 时如果存活的对象会被移动到 to 区to 区也会变成 from 区。存活的对象年龄1当年龄达到阈值时会晋升到老年区。但是如果 Young 区满了经历了一次 minorGC 后内存依然不够会把年轻代的对象迁移到老年区中。如果老年区和 Young 区都满了会触发一次 full GC 对整个堆内存进行一次垃圾回收publicstaticvoidmain(String[]args)throwsIOException{ListObjectlistnewArrayList();intcount0;while(true){System.in.read();System.out.println(count);list.add(newbyte[1024*1024]);}}为什么要分为 Young 区和老年代