java GC

作者: G_uest | 来源:发表于2019-08-13 16:34 被阅读0次

    jdk1.8环境下,有不对的地方望指正

    先上图

    javaGC.jpg

    java GC

    给每个对象分为两个阶段(新生代,老年代)
    新生代分为 Eden 和 Survivor 区
    Survivor 又分为 From 和 To 区
    新生代占 1/3 堆空间,老年代占 2/3 堆空间

    对象回收过程

    对象被创建,进入 Eden 区。当 Eden 区不足以分配空间时,会发起 Minor GC(第一次GC),把还存活的对象复制到 Survivor 区,并清空 Eden 区。(大对象将直接进入老年代 Old )

    假设 对象被复制到 Survivor 区的 From 区(如果From区空间不够,直接进入老年代)。第一次 GC 时,会清空 Eden 区和 To 区,把存活对象复制到 From区

    每一次 Minor GC,From 和 To 区的职责互换,这时 Eden 和 From 区中的存活对象会复制到 To 区,如此反复
    jvm 给每一个对象都定义了 对象年(Age)计数器,每一次 Minor GC 都会 Age + 1 ,当 Age = 15 时,转移到老年代。
    动态对象年龄,如果 Survivor 空间中,相同年龄所有对象的总和大于 From/To 区空间,年龄大于等于该年龄的对象就可以直接进入老年代

    经历过 16 次 Minor GC 的对象、大对象、动态年龄对象会一直在老年代里累计,空间不够时,将发起 Major GC,清理时将触发 STW(stop the world)。

    Minor GC 复制清理算法
    Major GC 标记整理算法

    相关文章

      网友评论

        本文标题:java GC

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