垃圾收集算法

分代收集理论

分代假说:
1、弱分代假说:绝大多数对象都是朝生夕灭的。
2、强分代假说:熬过越多次垃圾收集的对象就越难消亡。

跨代引用假说:跨代引用相对于同代引用只占极少数。根据这条假说,不应再为少量跨代引用扫描整个老年代,不必浪费空间记录每一个对象跨代引用的情况,只需在新生代建立一个全局的数据结构“记忆集”,把老年代分为若干小块,标识出老年代的哪一块存在跨代引用。发生新生代垃圾收集时,只有包含跨代引用的小块内存会被加入到GC Roots进行扫描。

分代垃圾收集

部分收集 Partial GC:不是完整收集整个堆的收集分为:
  新生代收集 Minor GC / Young GC 新生代的垃圾收集。
  老年代收集 Major GC / Old GC 老年代收集(“Major GC”的说法在某些资料中指整堆收集)。
  混合收集 Mixed GC :收集整个新生代和部分老年代。

整堆收集:收集整个Java堆和方法区。

垃圾收集算法

标记-清除算法

分为两个步骤:“标记”和“清除”。先标记需要回收的对象(或标记不需要回收的对象)
该算法的缺点:
1、执行效率不稳定,执行效率受对象数量影响。
2、内存空间碎片化问题,标记、清除后可能会产生大量不连续的空间碎片。

标记-复制法

半区复制:将内存分成相同大小的两块区域,每次只使用一块,当使用的内存块满了后,将存活的对象复制到另一块上,对使用的块的空间进行清理。分配内存时,顺序分配即可,因为清理是针对一整个块进行,不用担心碎片问题。
Appel式回收:把新生代分为一块较大的Eden区和两块较小的Survivor区,三个区域的默认比例是8:1:1。
每次回收时,只回收Eden和一块Survivor,将存活的对象回收到另一块Survivor上。

标记-整理算法

标记过程与标记清除法一样,然后让存活的对象往内存空间的一侧移动,然后清理掉边界以外的内存。移动存活对象的弊端在于移动过程中必须暂停用户应用程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值