咱们常常会听到许多垃圾回收的术语,例如:Minor GC、Major GC、Young GC、Old GC、Full GC、Stop-The-World 等。但这些 GC 术语到底指的是什么,它们之间的区别究竟是什么?今天咱们就来详细说说。html
从年轻代空间回收内存被称为 Minor GC,有时候也称之为 Young GC。对于 Minor GC,你须要知道的一些点:java
从老年代空间回收内存被称为 Major GC,有时候也称之为 Old GC。jvm
许多 Major GC 是由 Minor GC 触发的,因此不少状况下将这两种 GC 分离是不太可能的。性能
Minor GC 做用于年轻代,Major GC 做用于老年代。 分配对象内存时发现内存不够,触发 Minor GC。Minor GC 会将对象移到老年代中,若是此时老年代空间不够,那么触发 Major GC。所以才会说,许多 Major GC 是由 Minor GC 引发的。学习
Full GC 是清理整个堆空间 —— 包括年轻代、老年代和永久代(若是有的话)。所以 Full GC 能够说是 Minor GC 和 Major GC 的结合。spa
当准备要触发一次 Minor GC 时,若是发现年轻代的剩余空间比以往晋升的空间小,则不会触发 Minor GC 而是转为触发 Full GC。由于JVM此时认为:以前这么大空间的时候已经发生对象晋升了,那如今剩余空间更小了,那么很大几率上也会发生对象晋升。既然如此,那么我就直接帮你把事情给作了吧,直接来一次 Full GC,整理一下老年代和年轻代的空间。线程
另外,即在永久代分配空间但已经没有足够空间时,也会触发 Full GC。翻译
Stop-The-World,中文通常翻译为全世界暂停,是指在进行垃圾回收时由于标记或清理的须要,必须让全部执行任务的线程中止执行任务,从而让垃圾回收线程回收垃圾的时间间隔。日志
在 Stop-The-World 这段时间里,全部非垃圾回收线程都没法工做,都暂停下来。只有等到垃圾回收线程工做完成才能够继续工做。能够看出,Stop-The-World 时间的长短将关系到应用程序的响应时间,所以在 GC 过程当中,Stop-The-World 的时间是一个很是重要的指标。code
若是只是看,其实没法真正学会知识的。为了帮助你们更好地学习,我建了一个虚拟机群,专门讨论学习 Java 虚拟机方面的内容,每周针对我所发文章进行讨论答疑。若是你有兴趣,关注「Java技术精选」公众号,经过右下角菜单「入群交流」加我好友,小助手会拉你入群。