GC 算法(概要,名称介绍)

  • 术语解释
    • Mark:标记,记录所有存活对象。
    • Sweep:清除
    • Compact:整理,有时译成压缩
    • Copy:复制
    • Gambage collection Roots(GC根元素)
      • 正在执行方法里的局部变量和输入参数
      • 活动线程(Active threads)
      • 内存中所有类的静态字段(static field)
      • JNI引用
    • 安全点(safe point):可以安全的暂停线程的点
  • 标记可达对象(Marking Reachable Objects)

           GC 遍历内存中整体的对象关系图(object graph),从GC根扫描,到直接引用、其他对象(通过对象的属性域),都将被标记为存活对象。

          注意事项

  1.    标记需要暂停所有应用线程,这种情景叫做Stop The World pause(全线暂停)
  2.    暂停时间与堆大小、对象总数没有直接关系,而是由存活对象的数量来决定。

     

  •  删除不可达到对象(Removing Unused Objects)
    • 清除(Sweep)

                        直接忽略所有垃圾,不可达到对象所占用的空间都被认为是空闲的,可以分配新对象。使用空闲表(free-list)来记录空闲区域

  • 整理(Compact)

                     将所有存活对象迁移到内存空间的起始位置,依次放好。

                      缺点:

                        增加了GC暂停时间。

  • 复制(Cpoy)

                         标记-复制算法(mark and copy)和标记整理算法(Mark and Compact)

                                相似: 两者都会移动到所有的存活对象。

                                区别: 

                                      标记-复制算法是将内存移动到存活区(另一个空间)。优点:标记和复制可以同时进行;缺点是需要额外的内存空间来存放所有的存活对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值