Minor GC和Full GC有什么区别?

写在前面

本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见100个问题搞定Java虚拟机

解答

Minor GC/Young GC

指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生暮死的特性,所以 Minor GC非常频繁,一般回收速度也比較快。
新生代非常适合复制算法,新建 Java 对象优先放到 Eden 区,当 Eden 区的空间耗尽时, Java 虚拟机便会触发一次 Minor GC,来收集新生代的垃圾。
Eden 区和 from 指向的 Survivor 区中的存活对象会被复制到 to 指向的 Survivor 区中,然后交换 from 和 to 指针,以保证下一次 Minor GC 时,to 指向的 Survivor 区还是空的。

Major GC/Old GC

指目标只是老年代的垃圾收集。目前只有 CMS 垃圾收集器会有单独的收集老年代的行为。

在不同的资料上,Major GC和 Full GC存在混淆情况,本文采取《深入理解Java虚拟机:JVM高级特性与最佳实践第3版》的说法。

Full GC

一般指整个 Java 堆和方法区的垃圾回收。
出现了 Full GC,一般会伴随至少ー次的Minor GC。 Full GC 的速度一般会比 Minor GC 慢10倍以上。

同时最糟糕的是 Full GC 为了枚举 GC Roots 不得不 stop the world(STW)。
JVM 目前来说最大的缺点一方面是占用内存较多,另一方面就是这个 STW 了。
目前越来越多的大数据框架比如 Spark,Flink 等都是使用直接内存避免用 JVM 管理内存。

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值