• Minor GC、Major GC、Full GC的区别


    今天主要谈谈JVM GC的类型和策略,特别是大家经常混淆的Minor GC、Major GC、Full GC,年轻代GC、老年代GC,之间有什么区别和联系。

    Minor GC

    JVM堆内存被分为两部分:年轻代(Young Generation)和老年代(Old Generation)。

    Minor GC、Major GC、Full GC的区别-mikechen的互联网架构师之路

    1.年轻代

    年轻代是所有新对象产生的地方,当年轻代内存空间被用完时,就会触发垃圾回收,这个垃圾回收叫做Minor GC。

    年轻代被分为3个部分——Enden区和两个Survivor区,年轻代空间的要点:

    1. 大多数新建的对象都位于Eden区。
    2. 当Eden区被对象填满时,就会执行Minor GC。并把所有存活下来的对象转移到其中一个survivor区。
    3. Minor GC同样会检查存活下来的对象,并把它们转移到另一个survivor区。这样在一段时间内,总会有一个空的survivor区。
    4. 经过多次GC周期后,仍然存活下来的对象会被转移到年老代内存空间。通常这是在年轻代有资格提升到年老代前通过设定年龄阈值来完成的。

    2.年老代

    年老代内存里包含了长期存活的对象和经过多次Minor GC后依然存活下来的对象,通常会在老年代内存被占满时进行垃圾回收。

    Major 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算法组合。

    分代GC

    针对HotSpot VM的实现,其实GC的准确分类可以分为:

    1. 分代GC
    2. Full GC

    以及后续的G1的分区收集本质其实还是一个分代收集器,但是和之前的各类回收器不同,它同时兼顾年轻代和老年代。

    分代GC并不收集整个GC堆的模式,而是只专注分代收集

    1. Young GC:只收集年轻代的GC
    2. Old GC:只收集年老代的GC(只有CMS的concurrent collection是这个模式)
    3. Mixed GC:收集整个young gen以及部分old gen的GC(只有G1有这个模式)

    Full GC

    Full GC定义是相对明确的,就是针对整个新生代、老生代、元空间(metaspace,java8以上版本取代perm gen)的全局范围的GC。

  • 相关阅读:
    java进程自动杀死
    线程池的取值(一)与拒绝策略
    zju 1383 Binary Numbers
    可以连续几行数,,,分别相加求和
    几个数字的和
    zju 2812 Quicksum---------hdu 2734
    rwkj 1332 C语言实验四(函数):题目1、数字根
    zju 1295 Reverse Text
    zju 1241 Geometry Made Simple
    hdu 1379 DNA Sorting
  • 原文地址:https://www.cnblogs.com/hanease/p/15235700.html
Copyright © 2020-2023  润新知