前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >四、JVM分代收集理论

四、JVM分代收集理论

原创
作者头像
大数据程序猿
修改2020-09-09 18:05:57
6630
修改2020-09-09 18:05:57
举报
文章被收录于专栏: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又是空的了。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档