专栏首页JVM学习四、JVM分代收集理论
原创

四、JVM分代收集理论

当前商业虚拟机的垃圾收集器,大多数都遵循了“分代收集”(Generational Collection)的理论进行设计,所谓分代,就是将Java堆划分出不同的区域,然后将回收对象依据其年龄(年龄即对象熬过垃圾收集过程的次数)分配到不同的区域之中存储。分代的目的是垃圾收集器可以更快的收集“死掉”的对象。 如何判定对象已死?请参考 https://cloud.tencent.com/developer/article/1694697

HotSpot JVM 将堆分为年轻代(Young Generation)和老年代(Old Generation)两个区域

  • 新生代收集(Minor GC/Young GC):指目标只是新生代的垃圾收集。
  • 老年代收集(Major GC/Old GC):指目标只是老年代的垃圾收集。目前只有CMS收集器会有单独收集老年代的行为。另外请注意“Major GC”这个说法现在有点混淆,在不同资料上常有不同所指,读者需按上下文区分到底是指老年代的收集还是整堆收集。
  • 混合收集(Mixed GC):指目标是收集整个新生代以及部分老年代的垃圾收集。目前只有G1收集器会有这种行为。
  • 整堆收集(Full GC):收集整个Java堆和方法区的垃圾收集。

年轻代分为了三部分:1个Eden区和2个Survivor区(分别叫from和to)。默认比例为8:1

处理流程:

  1. 判断该对象是否是大对象,大对象直接进入老年代
  2. 如果不是大对象,会存储在Eden区。To survivor是空的
  3. 执行GC , Eden和From survivor区中存活下来的对象存在To survivor区
  4. From survivor和To survivor调换身份。这样To survivor又是空的了。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一、JVM运行时数据区

    JVM在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在...

    大数据程序猿
  • 六、经典垃圾收集器

    Serial收集器是最基础、历史最悠久的收集器,曾经(在JDK 1.3.1之前)是HotSpot虚拟机新生代收集器的唯一选择。大家只看名字就能够猜到,这个收集器...

    大数据程序猿
  • 三、对象已死?

    在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”

    大数据程序猿
  • python提取视频中的音频

    小小咸鱼YwY
  • jvm垃圾回收之引用计数算法和可达性分析算法(判断对象是否存活算法

    什么是引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值加1;当引用失效时,计数器值减1,引用数量为0的时候,则说明对象没有被任何引用指...

    黎明大大
  • Django Rest Framework 解析器(下)

    ① 仅处理请求头 content-type 为 application/json 的请求体

    小团子
  • Linux服务器最最基本安全策略

    1、Linux SSH 安全策略一:关闭无关端口 网络上被攻陷的大多数主机,是黑客用扫描工具大范围进行扫描而被瞄准上的。所以,为了避免被扫描到,除了必要的端口,...

    李海彬
  • debian系linux更新时,提示“由于没有公钥,无法验证下列签名”

    此时继续使用sudo apt-get update更新,发现没有公钥错误提示了,但还存在校验问题。

    双面人
  • 对象的最后一次救赎

    我们都知道当堆内存不够用的时候,会进行垃圾回收,回收的则是对象,那么哪些对象会被作为”垃圾“被回收呢?

    用户7386338
  • React学习笔记—JSX

    小胖

扫码关注云+社区

领取腾讯云代金券