zoukankan      html  css  js  c++  java
  • 什么是新生代 GC 和老年代 GC

    GC 经常发生的区域是堆区,堆区还可以细分为新生代、老年代

    堆

    jvm堆示意图

    新生代

    • 一个 Eden 区
    • 两个 Survivor 区

    老年代

    • 默认 新生代(Young)与老年代(Old)的比例的值为 1:2 (该值可以通过参数–XX:NewRatio 来指定)。
    • 默认的 Eden:from:to=8:1:1 (可以通过参数 –XX:SurvivorRatio 来设定)。

    新生代GC(MinorGC/YoungGC)

    指发生在新生代的垃圾收集动作,因为 Java 对象大多都具备朝生夕灭的特性,所以 MinorGC 非常频繁,一般回收速度也比较快。

    老年代GC(MajorGC/FullGC)

    指发生在老年代的 GC,出现了 MajorGC,经常会伴随至少一次的 MinorGC(但非绝对的,在 Parallel Scavenge 收集器的收集策略里就有直接进行 MajorGC 的策略选择过程)。MajorGC 的速度一般会比 MinorGC 慢 10 倍以上。

    什么情况下会出现 Young GC?

    对象优先在新生代 Eden 区中分配,如果 Eden 区没有足够的空间时,就会触发一次 Young GC 。

    什么情况下回出现 Full GC?

    Full GC 的触发条件有多个,FULL GC 的时候会 STOP THE WORD

    • 在执行 Young GC 之前,JVM 会进行空间分配担保——如果老年代的连续空间小于新生代对象的总大小(或历次晋升的平均大小),则触发一次 Full GC 。
    • 大对象直接进入老年代,从年轻代晋升上来的老对象,尝试在老年代分配内存时,但是老年代内存空间不够。
    • 显式调用 System.gc() 方法时。
  • 相关阅读:
    UIViewcontroller生命周期方法
    runtime中的宏定义解释表
    opencv在Mac环境下的安装和配置
    Oracle导入导出
    Oracle触发器详解
    查找表的父表和子表
    Oracle创建表空间
    TRIGGER控制级联更新
    启动Oracle的bat文件
    PL(SQL)块
  • 原文地址:https://www.cnblogs.com/luao/p/10644124.html
Copyright © 2011-2022 走看看