常见的新生代和老年代的垃圾回收算法有哪些

新生代垃圾回收算法

新生代主要存放生命周期较短的对象,其垃圾回收算法主要包括:

  1. 复制算法(Copying)
    • 原理:将内存划分为等大的两块,每次只使用其中的一块。当一块内存用完了,就将还存活的对象复制到另一块上面,然后再把已使用过的内存空间一次清理掉。
    • 优点:解决了内存碎片化问题,且效率较高(清理内存时,记住首尾地址,一次性抹掉)。
    • 缺点:内存利用率不高,每次只能使用一半内存。
    • JVM实现:JVM将整个新生代按照8:1:1的比例划分为三块,最大的称为Eden区,较小的两块分别称为From Survivor和To Survivor。当Eden区满时,触发Minor GC,存活的对象被复制到From Survivor区;当再次触发Minor GC时,Eden区和From Survivor区中的存活对象被复制到To Survivor区,然后清空Eden区和From Survivor区。如此循环往复。

老年代垃圾回收算法

老年代主要存放生命周期较长的对象,其垃圾回收算法主要包括:

  1. 标记-清除算法(Mark-Sweep)
    • 原理:分为两个阶段,第一阶段是标记阶段,GC会把所有的活动对象打上标记;第二阶段是把那些没有标记的对象(非活动对象)进行回收。
    • 缺点:效率问题(遍历了两次内存空间),空间问题(容易产生大量内存碎片)。
  1. 标记-整理算法(Mark-Compact)
    • 原理:标记阶段与标记-清除算法相同,但在清除阶段,标记-整理算法会将存活的对象都向一端移动,然后直接清理掉边界以外的内存。
    • 优点:解决了标记-清除算法中的内存碎片问题。
  1. 分代收集算法(Generational Collection)
    • 原理:根据对象存活周期的不同将内存划分为几块。一般是把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法。在新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。而老年代中因为对象存活率高、没有额外空间对它进行分配担保,就必须使用“标记-清除”或者“标记-整理”算法来进行回收。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jvm年代垃圾回收算法包括标记-清除算法和复制算法。标记-清除算法通过可达性分析,标记出所有需要回收的对象,然后统一回收所有被标记的对象。但这个算法效率较低,并且清除结束后会造成大量的碎片空间。有可能会在申请大块内存时由于没有足够的连续空间而需要进行再次垃圾回收。 复制算法则会将存活的对象移动到一起,然后清除边界外的垃圾对象。这个算法适用于新生代垃圾回收,它的效率较高。在年代中,常用的垃圾回收算法是Serial和SerialOld。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [一文了解JVM全部垃圾回收器,从Serial到ZGC](https://download.csdn.net/download/weixin_38725531/15453069)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [JVM常用垃圾回收算法](https://blog.csdn.net/qq_36818328/article/details/128412384)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [JVM垃圾回收算法](https://blog.csdn.net/weixin_44130094/article/details/123504630)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值