美文网首页JVM
Minor GC、Major GC和Full GC之间的区别

Minor GC、Major GC和Full GC之间的区别

作者: 先生zeng | 来源:发表于2019-12-20 16:02 被阅读0次

    昨天遇到一个问题,被问到major gc以及full gc有什么区别,发现自己对这个知识一时竟然很模糊,之前看了深入理解jvm虚拟机这本书,里面关于这方面的介绍比较少,看虚拟机实战这本书发现也是,概括的很笼统。所以我之前博客上也没有这方面的记录。所以今天打算去学习下这方面的内容。

    就记录下关于Minor GC、Major GC和Full GC之间的区别

    Minor GC

    主要是从java堆中的年轻代(包括 Eden 和 Survivor 区域)回收内存的gc就被称为 Minor GC。

    发生的场景:

    当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如当 Eden 区满了。所以分配率越高,越频繁执行 Minor GC。

    执行 Minor GC 操作时,只会gc年轻代的内存空间。但是可能会导致full gc的发生,这里先不说。所有的minor gc都会导致"Stop the world"现象,这个现象就是说gc线程在启动是,其他的所有jvm线程都会暂停。对于我们来说,就是
    会产生卡顿,但是一般来说,他执行时是很快的,因为新生代的空间一般很小,同时新生代空间中没用的对象,不会复制到老年代中了。

    Major GC

    前面我们说Minor GC会清理新生代的空间,对于的Major GC就是清理老年代的空间了。

    Major GC 是清理永久代。

    Full GC

    Full GC 是清理整个堆空间—包括年轻代和老久代。

    GC触发条件:Eden区满了触发Minor GC,这时会把Eden区存活的对象复制到Survivor区,当对象在Survivor区熬过一定次数的Minor GC之后,就会晋升到老年代(当然并不是所有的对象都是这样晋升的到老年代的),当老年代满了,就会报OutofMemory异常。

    待续补充。。。

    相关文章

      网友评论

        本文标题:Minor GC、Major GC和Full GC之间的区别

        本文链接:https://www.haomeiwen.com/subject/idlinctx.html