四、垃圾收集之垃圾收集算法

一、标记-清除算法

  1. 最基础的收集算法,其余的算法基本都是由此算法改进得来
  2. 效率不高,标记和清除的过程效率都不高
  3. 清除之后会产生大量的不连续的内存碎片

 082520_xooi_3001485.png

二、复制算法

  1. 为了解决标记-清除算法的效率问题而出现的复制算法
  2. 将内存分为两块,一个半区用于放对象,另一个半区是空的
  3. 垃圾回收时将放置对象的半区中未被标记死亡的对象放到空半区
  4. 这样的好处在于实现简单,运行高效
  5. 缺点是牺牲了一般的内存空间,代价太大

082929_szP3_3001485.png 

三、现在的复制算法

  1. HotSpot虚拟机采用Eden-Survivor分区的方式
  2. 将内存分为Eden空间和两块Survivor空间,大小为8 : 1 : 1
  3. 回收时将Eden空间和一块Survivor空间中还存活的对象复制到另一个Survivor空间中
  4. 这样做的原因是因为:98%的新生代都是“朝生夕死”的,所以每次回收的时候可以将存活的对象放到较小的一块区域
  5. 当另一块Survivor空间没有大小不够时,虚拟机会通过分配担保机制将这些对象划进老年代

四、标记-整理算法

  1. 在老年代中一般都是存活时间比较长的对象,所以不适合使用复制算法进行回收(基本不会“朝生夕死”)
  2. 标记-整理算法会将所有存活的的对象都像一端移动,然后清理掉边界以外的内存

084112_8DIO_3001485.png

五、分代回收算法

  1. 当前商业虚拟机的垃圾收集都采用分代回收算法
  2. 将内存划分为几块,一般是把java堆分成新生代和老年代,根据各个年龄代的特点,选择不同的算法进行回收
  3. 新生代一般是“朝生夕死”,所以采用复制算法,高效且不需要很大的空闲内存
  4. 老年代的对象存活率高,所以使用标记-清除算法或者标记-整理算法

转载于:https://my.oschina.net/u/3001485/blog/801179

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值