前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >jvm -垃圾收集算法与经典垃圾收集器

jvm -垃圾收集算法与经典垃圾收集器

原创
作者头像
猎户星座1
修改2020-06-15 10:31:51
2540
修改2020-06-15 10:31:51
举报
文章被收录于专栏:Java StudyJava Study
代码语言:txt
复制
                jvm学习 跟随《第三版深入理解Java虚拟机》巨著学习,哈哈哈(书本的第三章)

垃圾收集算法

*标记清除算法

*标记复制算法

*标记移动算法

标记-清除算法

标记清除算法,首先对需要收集的对进行标记,或者对不需要回收的对象进行标记,然后统一回收掉被标记的对象。

观点:很明显,从算法的角度来说,对整个区域内的对象进行遍历,判断是否为需要回收的对象,时间复杂度为 O(n)会随着对象数量增加,执行的时间会相应增加,还有,对象收集后,留下的内存区域一般为不连续的,再要存放内存占用大的对象时候,就需要维护一个空闲链表来 使用(类比大学期间 操作系统老师讲授的 内存分配知识)。

标记-复制算法

首先将栈区分为1/2,1/2 的区域会用作存放对象,另一半空闲,当发生垃圾回收时,该算法会将标记不回收的对象,统一复制到 1/2空闲的区域,再将剩下的清除掉。

分析:这样做减少了标记 是否需要回收对象的时间,但总体来说1/2的存储空间相对被浪费了,而且试想,栈区能被存储空间小了,因此栈区会被比较快的存满,调用垃圾回收进程次数应该比 使用标记清除算法的多。

标记-整理算法

针对老年代对象的存亡特征,老年代需要回收的对象较少,相对新生代要清除的对象要少,因此格局变动的少。首先标记要回收的对象,然后将对象清理,并把剩余的对象,向一端靠拢,比如所有的对象向左靠拢,解决了剩余的空间是较大的,不是碎片的,并且因为老年代更替较慢,需要移动的对象较少,不用担心移动次数多的困扰。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 垃圾收集算法
    • 标记-清除算法
      • 标记-复制算法
        • 标记-整理算法
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档