Java 虚拟机-垃圾收集算法

本文主要介绍Java虚拟机的垃圾回收算法。

一、概述

二、标记-清除算法

Mark-Sweep。如同名字,该算法分两步:

  1. 标记:标记处需要回收的对象
  2. 清除:标记完成后统一回收被标记的对象。

缺点:

  1. 效率问题:标记和清除的效率都不高
  2. 空间问题:标记清除以后会产生大量不连续的内存碎片

三、复制算法

复制算法是对标记清除的优化,它将堆上的内存分为两个大小相等的区域,一个是空闲区域,一个是活动区域。在程序运行中,实际使用的是活动区域,也就是有50%的空间被浪费掉

实现过程:

  1. 找出活动空间中所有存活的对象。
  2. 将这些存活的对象复制到空闲区域。
  3. 将之前的活动空间清空,然后,就变为空闲空间了,而存活对象所在的区域,则变为活动空间了。

优点,内存回收完毕后,有一大片连续的可用空间。

缺点,有50%的内存空间被放着,只有在发生内存回收的时候,GC才会借用空闲区域来实现内存回收工作。

四、标记-整理算法

标记操作和“标记-清除”算法一致,后续操作不只是直接清理对象,而是在清理无用对象完成后让所有存活的对象都向一端移动,并更新引用其对象的指针。

主要缺点:在标记-清除的基础上还需进行对象的移动,成本相对较高,好处则是不会产生内存碎片。

五、分代收集算法

把java堆分为新生代和老年代:

  1. 新生带:每次会有大批对象死去,只有少量存活,选用复制算法,只需要对少量存活的对象进行复制,复制成本低。
  2. 老年代:老年代对象存活率高,使用标记-清理或者标记整理算法进行回收。

转载于:https://www.cnblogs.com/Brake/p/jvm_GC_algorithm.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值