前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM垃圾收集详解

JVM垃圾收集详解

作者头像
Java学习录
发布2019-05-15 13:46:54
3950
发布2019-05-15 13:46:54
举报
文章被收录于专栏:Java学习录Java学习录

本文涉及:垃圾对象的判定、常见垃圾收集算法

哪些对象需要回收

判断对象是否需要回收的算法有引用计数法和可达性分析法

引用计数法

为每个对象标记一个引用数量,当这个对象被另外一个对象引用时它的引用数据就加一,当另外一个对象释放了对它的引用它的引用数量就减一。当它的引用变为0时意味着没有对象引用,就可以回收了

引用计数法存在的问题

  • 系统无时无刻不在进行引用的增加和修改,引用和去引用伴随着加减法,非常影响性能
  • 很难处理循环引用,例如下图右面三个对象互相持有对方的引用则无法处理

可达性分析

通过设置一个跟节点,如果从根节点出发没有任何路径到达一个对象,则标记这个对象为不可达对象,当一个对象被标记了2次不可达对象之后将面临回收

垃圾收集算法

标记清除法

首先标记所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象

缺点

  • 标记和清除的效率都不高
  • 标记清除后会产生大量的不连续空间

复制算法

将原有的内存空间分为两块。每次只使用其中一块,在垃圾回收时,将正在使用的内存空间的存活的对象全都复制到未使用的那块内存空间,然后清除正在使用的那块内存,再交换两个角色,完成垃圾回收

缺点

  • 空间浪费

标记压缩法

第一步标记阶段与标记清除法一样,标记所有需要回收的对象,接着把所有需要回收的对象全都压缩到内存的一端,之后再进行清理

分代收集

分代收集法是目前大部分 JVM 所采用的方法,其核心思想是根据对象存活的不同生命周期将内存划分为不同的域,然后根据不同域的特点选择不同的算法

  • 新生代因为每次垃圾回收都需要回收大量的对象,故使用复制算法
  • 老年代因为每次回收少量对象,使用标记整理对象

分区收集算法

分区算法则将整个堆空间划分为连续的不同小区间, 每个小区间独立使用, 独立回收. 这样做的好处是可以控制一次回收多少个小区间 , 根据目标停顿时间, 每次合理地回收若干个小区间(而不是整个堆), 从而减少一次 GC 所产生的停顿

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习录 微信公众号,前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档