JVM中GC详解

44 篇文章 0 订阅
6 篇文章 0 订阅

在Java面试过程中,JVM是必问项目。主要问题一般都是集中到JVM GC的类型和策略上。
今天主要谈到的是年轻代GC、老年代GC以及Minor GC、Major GC、Full GC之间的联系与区别。
JVM堆内存分为两部分:年轻代(Young Generation)和老年代(Old Generation)。

  • 年轻代:
    产生新对象。
    年轻代被分为3个部分:一个Eden区和两个Survivor区。当年轻代内存空间用完时,就会触发垃圾回收,这个垃圾回收称为Minor GC。
    在年轻代空间中,大部分新建的对象都位于Eden区当Eden区被对象填满时,就会执行Minor GC,并将所有存活下来的对象转移到某一个survivor区。
    Minor GC也会同样检查存活下来的对象,将他们移动到另一个survivor区。这样保证在一段时间内,总会存在一个空的survivor区。
    经过多次GC周期后,仍然存活的对象会被转移到老年代内存空间。通常是在年轻代提升到老年代通过设定年龄阈值来完成的。
  • 老年代:
    老年代内存中,包含长期存活的对象和经过多次GC仍然存活下来的对象。老年代的垃圾回收会在老年代内存占满时进行。
    老年代的垃圾回收称为Major GC,Major GC通常与Full GC是等价的,收集整个GC堆。
    Minor GC和Major GC其实就是年轻代GC和老年代GC的俗称。
    在Hotspot VM中,具体实现的收集器有:Serial GC、Parallel GC、CMS、G1 GC。大致可以对应到某个Young GC和Old GC算法组合。
  • 针对HotSpot VM的实现,其实GC的准确分类可以分为:
    分代GC
    Full GC
    及后续的G1分区收集其实本质是一个分代收集器,但是和之前其他各类回收器不同,它同时兼顾年轻代和老年代。
    分代GC并不GC整个堆的模式,而是专注分代收集:
    Young GC:只是年轻代的垃圾回收
    Old GC:只是老年代的垃圾回收(只有CMS的concurrent collection是这个模式)
    Mixed GC:整个年轻代以及部分老年代的垃圾回收(只有G1有这个模式)
    Full GC是针对整个新生代、老年代、元空间(metaspace,Java8以上版本取代perm gen)的全局范围的垃圾回收。
    带你对标阿里P6
    学习更多知识,可以扫码进群或关注公众号
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值