当前位置: 首页 > news >正文

【jvm】什么时候对象进入老年代

目录

          • 1. 对象年龄达到阈值
          • 2. 大对象直接进入老年代
          • 3. 动态晋升条件

1. 对象年龄达到阈值
  • 1.基本机制:当一个对象在新生代(包括Eden区和Survivor区)中经历了多次垃圾回收(GC)后仍然存活,其年龄会逐渐增加。当年龄达到某个设定的阈值时,该对象将被晋升到老年代。
  • 2.默认设置:默认情况下,这个年龄阈值是15。也就是说,对象在新生代中经历了15次GC后,如果仍然存活,就会被晋升到老年代。
  • 3.参数调整:可以通过JVM参数-XX:MaxTenuringThreshold来调整这个年龄阈值。例如,
    -XX:MaxTenuringThreshold=10表示对象在新生代中经历10次GC后,如果仍然存活,就会被晋升到老年代。
2. 大对象直接进入老年代
  • 1.定义:大对象是指占用较大内存空间的对象,如大数组或长字符串等。
  • 2.机制:由于大对象需要连续的内存空间,而新生代为了安放大对象可能需要多次进行GC,增加开销。同时,新生代中伊甸园区和幸存者区常采用复制算法,需要经常复制对象到不同的区域,而大对象在复制时开销较大。因此,JVM通常会将大对象直接分配在老年代中。
  • 3.参数设置:可以通过JVM参数-XX:PretenureSizeThreshold来设置大对象的阈值。例如
    -XX:PretenureSizeThreshold=5242880(即5MB)表示大于5MB的对象将直接进入老年代。此参数仅适用于Serial和ParNew两款新生代收集器。
3. 动态晋升条件
  • 1.机制:除了上述两种明确的晋升条件外,JVM还会根据新生代空间的使用情况和对象的年龄分布来动态地选择对象进入老年代。具体来说,当Survivor区中年龄从1到n的对象大小之和超过Survivor区的50%时(这个比例也可以通过参数-XX:TargetSurvivorRatio进行调整),新生代中年龄大于等于n的对象将进入老年代。
  • 2.目的:这种动态晋升机制旨在更好地利用内存空间,避免新生代空间被长期存活的对象占满而导致频繁的GC操作。
http://www.lryc.cn/news/473506.html

相关文章:

  • Vue.nextTick 使用指南:数据更新与 DOM 同步利器
  • 第三百零一节 Lucene教程 - Lucene索引文件
  • 动态规划 01背包(算法)
  • 使用常数指针作为函数参数
  • wps宏代码学习
  • libavdevice.so.58: cannot open shared object file: No such file ordirectory踩坑
  • Rust:Vec<u8> 与 [u8] 之间的转换
  • Leetcode 课程表
  • Java面试经典 150 题.P55. 跳跃游戏(009)
  • 登录的时候密码使用crypto-js加密解密
  • LLM大模型部署实战指南:部署简化流程
  • 24年10月Google Play政策更新通知
  • 玄机-应急响应- Linux入侵排查
  • 数据驱动业务中的BDS对账班牛返款表集成方案
  • 【Kubernetes实战】三、资源组件Namespace、Pod、Label、Deployment、Service概述。
  • 去中心化的模型训练
  • Arthas调试线上代码技巧
  • QT访问数据库:应用提示Driver not loaded
  • 支持ANC的头戴式蓝牙耳机,更有小金标认证,QCY H3 Pro体验
  • net framework 3.5组件更新失败错误代码0x80072f8f怎样解决
  • C语言初阶:十一.代码调试技巧
  • Jenkins Pipeline 部署总结
  • HTTP的初步了解
  • SM单元 硬件
  • 如何从CSV、JSON等格式创建DataFrame
  • Java避坑案例 - 线程池错误的混用引发的性能故障分析
  • 七种方法助你找到实用且免费的API服务
  • leetcode-74-搜索二维矩阵
  • 122.WEB渗透测试-信息收集-ARL(13)
  • 动态规划 —— 路径问题-下降路径最小和