• minor GC 、 full GC、新生代(young )、老年代(old)的一些理解


    Minor GC

    Minor GC是俗称,新生代(新生代分为一个 Eden区和两个Survivor区)的垃圾收集叫做 Minor GC。 清除 Eden 和 from ,转到to中。接下来from与to转换。继续清除 Eden和新from,转到to。清除一次后存活超过年龄的 ,转到老年代。to到了阈值后,部分对象转到老年代。

    晋升老年代参数:XX:+MaxTenuringThreshold

    (至于为什么是 15次,原因是 HotSpot会在对象头的中的标记字段里记录年龄,分配到的空间只有4位,所以最多只能记录到15)

    另外,如果单个 Survivor 区已经被占用了 50% (对应虚拟机参数: -XX:TargetSurvivorRatio),那么较高复制次数的对象也会被晋升至老年代。

    Full GC 就是收集整个堆,包括新生代,老年代,永久代(在JDK 1.8及以后,永久代会被移除,换为metaspace)等收集所有部分的模式。

    新生代老年代比例

    默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ),即:新生代 ( Young ) = 1/3 的堆空间大小。
    老年代 ( Old ) = 2/3 的堆空间大小

    新生代(young generation)

    Eden、survivor(from+to),Eden:From:To=8:1:1( 可以通过参数 –XX:SurvivorRatio 来设定 ),即:Eden = 8/10 的新生代空间大小,From = To = 1/10 的新生代空间大小。 新生对象在Eden和from中,minor gc后,转到to或者老年代。一次minor gc后,from与to角色互转。
    新生代实际可用的内存空间为 9/10 ( 即90% )的新生代空间。
    来自 https://blog.csdn.net/Muyundefeng/article/details/72667863

    老年代(old generation):存有大对象或者 超过阈值的对象晋升来。

    -XX:PretenureSizeThreshold 参数 ,大于这个数量直接在老年代分配,缺省为0 ,表示绝不会直接分配在老年代

    【来自】java堆,新生代,老年代,Eden空间,From Survivor空间,To Survivor空间
    堆的内存模型大致为:在这里插入图片描述
    默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ),即:新生代 ( Young ) = 1/3 的堆空间大小。
    老年代 ( Old ) = 2/3 的堆空间大小。其中,新生代 ( Young ) 被细分为 Eden 和 两个 Survivor 区域,这两个 Survivor 区域分别被命名为 from 和 to,以示区分。
    默认的,Edem : from : to = 8 : 1 : 1 ( 可以通过参数 –XX:SurvivorRatio 来设定 ),即: Eden = 8/10 的新生代空间大小,from = to = 1/10 的新生代空间大小。
    JVM 每次只会使用 Eden 和其中的一块 Survivor 区域来为对象服务,所以无论什么时候,总是有一块 Survivor 区域是空闲着的。

    java堆,新生代,老年代,Eden空间,From Survivor空间,To Survivor空间
    JVM 系列文章之 Full GC 和 Minor GC

  • 相关阅读:
    实现报表数据外置计算
    实现报表数据的可控缓存
    实现报表数据分库存储
    实现报表数据预先计算
    实现报表与算法的统一管理
    如何实现报表直接打印需求
    交叉填报表的制作
    格间计算性能提升方案
    填报脚本之轻松搞定复杂表的数据入库
    treeview_dropdown_control
  • 原文地址:https://www.cnblogs.com/thewindkee/p/12873135.html
Copyright © 2020-2023  润新知