JVM内存分配策略、各个代区、FullGC/MinorGC

本文主要讨论JVM默认的Serial/Serial Old内存分配策略。介绍了对象优先在Eden分配、大对象直接进老年代等几种分配方案,阐述了MinorGC和FullGC/Major的区别与触发条件,还说明了HotSpot的新生代、老年代、永久代等区域,以及JDK 1.8的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JVM内存分配策略、各个代区、FullGC/MinorGC

主要讨论默认的Serial/Serial Old内存分配:

一、几种分配方案

  1.  对象优先在Eden分配;

此文来自: 马开东云搜索 转载请注明出处 网址: http://m.makaidong.com

此文原标题: JVM内存分配策略、各个代区、FullGC/MinorGC 来源网址: http://m.makaidong.com/mzzcy/2122_7047222.html

    一般情况下,对象会在新生代的Eden区分配,Eden区没有足够空间时,虚拟机会 发起一次MinorGC;当MinorGC时,若无法放入survivor空间,就会再通过分配担保机制转移到老年代中;

  2. 大对象直接进入老年代;

    通过 -XX:PretenureSizeThreshold参数设置;

  3. 长期存活的对象进入老年代:

    通过 -XX:MaxTenuringThreshold参数设置;每MinorGC一次还存活在Survivor中,则年龄加1;

  4. 组团进入 老年代:

    在survivor中年龄相同的所有对象大小总和大于 PretenureSizeThreshold 参数的一半,年龄大于或等于该年龄的对象进入老年代。

  5. 空间担保进入 老年代:

    每次MinorGC之前,会检查老年代最大连续可用空间是否大于 新生代所有对象的总空间,大于则表示安全可进行MinorGC;

    如果小于:(JDK 6U24不再检查HandlePromotionFailure,一定会冒险)

        a. 检查HandlePromotionFailure 为 true ,表示允许冒险,则与历次晋升到老年代的对象平均大小比较,若大于则进行MinorGC,若小于则进行FullGC;

        b. HandlePromotionFailure 为 false,进行FullGC;

    

 

二、MinorGC 与FullGC/Major

  MinorGC:指发生在新生代的GC,因大多数新生对象生命周期很短,所以MinorGC通常很频繁,回收速度也较快;

  MajorGC/FullGC:指老年代GC,速度一般较慢,一般是MinorGC的10倍;通常MajorGC会伴随一次MinorGC;(书原话,有歧义)

  参考知乎R大答案:Major GC和Full GC的区别是什么?触发条件呢?

    触发条件:

    MinorGC:Eden区满时触发;FullGC也会伴随有MinorGC;通常会使得Old gen变大;

    FullGC:a. MinorGC触发前,检查历次进入老年代的平均大小,若小于则FullGC;

        b. 如果有永久代(perm gen),在不足哆分配时,触发FullGC;

        c. 调用System.gc(),提醒JVM FullGC,但不可控;

三、HotSpot几个区域

  新生代分为:Eden Space、Survivor Space

  老年代:Tenured Gen

  永久代:Perm Gen(方法区相关数据);

      在 JDK 1.8 中, HotSpot 已经没有 “PermGen space”这个区间了,取而代之是一个叫做 Metaspace(元空间) 的东西。

      扩展:Java8内存模型—永久代(PermGen)和元空间(Metaspace)

  

 

原创,专业,图文 JVM内存分配策略、各个代区、FullGC/MinorGC - JVM,内存,分配,策略,各个,代区,FullGC,MinorGC 今日头条,最新,最好,最优秀,最靠谱,最有用,最好看,最有效,最热,排行榜,最牛,怎么办,怎么弄,解决方案,解决方法,怎么处理,如何处理,如何解决
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值