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

昨天遇到一个问题,被问到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异常。

待续补充。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、GC是什么?为什么要有GC? GC垃圾收集,Java提供的GC可以自动监测对象是否超过作用域从而达到自动回收内...
    夏与清风阅读 5,113评论 0 5
  • JVM架构 当一个程序启动之前,它的class会被类装载器装入方法区(Permanent区),执行引擎读取方法区的...
    cocohaifang阅读 1,690评论 0 7
  • java基础volidate、线程生命周期、反射、NIO 内存分区GC、类加载 强弱等引用 基本数据结构 线程池 ...
    RichardLee123阅读 291评论 0 3
  • 2019-11-01 遇到的一点小问题最近在树莓派上做东西,有几张SD卡需要来回切换。使用ssh经常遇到IP变掉的...
    苍蝇的梦阅读 1,844评论 0 1