• java对象晋升的四种情况


    java晋升(进入老年代)的四种方法

    1.   担保机制
    2.   大对象直接进入老年代
    3.   长期存活的对象
    4.   动态年龄判断

    1. 担保机制

      什么是担保机制?

      就是你的新生代内存不足的时候,通过担保分配的方式让大对象直接分配到老年代;

      谁来担保?当然是老年代,为什么叫“担保”?就像贷款需要担保一样,年轻代存放不下的时候(自己信用不够的时候),需要让老年代来存放(需要相应的担保人来进行担保),老年代就是这个担保人,担保人需要保证老年代一定能存放的下

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

      通过参数-XX:PretenureSizeThreshold来定义大对象,单位byte,默认为0;

      这个参数的默认值为0,也就是说,所有的对象创建出来之后默认都是分配到新生代的,当我们指定了大小之后,只要创建出来的对象超过设定值,那么这个对像就会直接晋升到老年代;

      需要注意的是:PretenureSizeThreshold参数只对Serial和ParNew两款收集器有效;

    3.长期存活的对象

      长期存活的对象进入老年代。在堆中分配内存的对象,其内存布局的Header中包含了 GC 分代年龄标记信息。如果对象在 eden 区出生,那么它的 GC 分代年龄会初始值为 1,每熬过一次 Minor GC 而不被回收,这个值就会增加 1 岁。当它的年龄到达一定的数值时(默认是 15 岁),就会晋升到老年代中。

    4.动态年龄判断

      当 Survivor 空间中相同年龄所有对象的大小总和大于 Survivor 空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,而不需要达到默认的分代年龄。

     

    参考链接:

      https://blog.csdn.net/qq_27184497/article/details/117828331

  • 相关阅读:
    Flex 加载资源方式
    java在linux系统下开机启动无法使用sudo命令的原因
    Android SDK 1.5中文版 (Application基础—5)
    还原ORACLE DUMP 的值
    JAVA操作windows共享目录
    [C++] 解释一下m_pfnCreateObject
    Android SDK 1.5中文版 (Application基础—4)
    O7_DICTIONARY_ACCESSIBILITY&REMOTE_OS_AUTHENT
    Android SDK 1.5中文版 (Application基础—3)
    Android SDK 1.5中文版 (Application基础—2)
  • 原文地址:https://www.cnblogs.com/lsgspace/p/16220029.html
Copyright © 2020-2023  润新知