前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >码仔漫画:“你是什么垃圾?”(下)

码仔漫画:“你是什么垃圾?”(下)

作者头像
陈宇明
发布2020-12-16 10:40:32
3620
发布2020-12-16 10:40:32
举报
文章被收录于专栏:设计模式
作者:iMononoke

博客:https://juejin.im/user/5c629a3051882562191755d8

前几天发了上篇:《码仔漫画:来自JVM的灵魂拷问:“你是什么垃圾?”(上)》

四种引用类型

对于GC来说,对象是否被应该回收的取决于该对象是否被引用。为了控制对象的生存周期,提供了四种引用方式,引用的强度从强到弱分别为:

强引用 -> 软引用 -> 弱引用 -> 虚引用

引用的作用

  • 方便Jvm进行垃圾回收
  • 方便开发人员使用

几种类型的继承关系

再比较下

怎么回收?

1. 标记清除法

这是GC算法的思想基础。将垃圾分为两个阶段:

  • 标记阶段。 通过根节点,标记所有从根节点开始的可达对象,未标记过的对象就是未被引用的垃圾对象。
  • 清除阶段。 清除所有未被标记的对象。

2. 复制算法

为了解决效率问题而出现的。

将原有的内存空间分为两块,每次只使用其中一块。

在垃圾回收时,将正在使用的内存中存活对象复制到未使用的内存块,然后清除使用的内存块中所有的对象。

3. 标记整理算法

过程与标记-清除算法一样,不过不是直接对可回收对象进行清理,而是让所有存活对象都向一端移动,然后直接清理掉边界以外的内存。

比较了下这三种算法~

最后一种,是上面三种的综合了~

4. 分代收集算法

现代商用虚拟机基本都采用分代收集算法来进行垃圾回收。其实是上面几种算法的结合。

垃圾回收主要是在Young(年轻代)和 Old(老年代)工作。

堆内存空间主要是这样分配的:

分代回收的过程是这样滴:

最后还有 堆内存分配与相关参数

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

本文分享自 码个蛋 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前几天发了上篇:《码仔漫画:来自JVM的灵魂拷问:“你是什么垃圾?”(上)》
    • 1. 标记清除法
      • 2. 复制算法
        • 3. 标记整理算法
          • 4. 分代收集算法
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档