新创建出来的对象一开始都会停留在新生代中,但随着JVM的运行,有些存活的长的对象会慢慢的移动到老年代中。
1. 根据对象年龄
JVM会给对象增加一个年龄(age)的计数器,对象每“熬过”一次GC,年龄就要+1,待对象到达设置的阈值(默认为15岁)就会被移移动到老年代,可通过-XX:MaxTenuringThreshold调整这个阈值。

一次
Minor GC后,对象年龄就会+1,达到阈值的对象就移动到老年代,其他存活下来的对象会继续保留在新生代中。

2. 动态年龄判断
根据对象年龄有另外一个策略也会让对象进入老年代,不用等待15次GC之后进入老年代,他的大致规则就是,假如当前放对象的Survivor,一批对象的总大小大于这块Survivor内存的50%,那么大于这批对象年龄的对象,就可以直接进入老年代了。

如图上的A、B、D、E这四个对象,假如
Survivor 2是100m,如果
A + B + D的内存大小超过50m,现在D的年龄是10,那E都会被移动到老年代。
实际上这个计算逻辑是这样的:
年龄1 + 年龄2 + 年龄n的多个对象总和超过
Survivor区的50%,那就会把年龄n以上的对象都放入老年代。

3. 大对象直接进入老年代
如果设置了-XX:PretenureSizeThreshold这个参数,那么如果你要创建的对象大于这个参数的值,比如分配一个超大的字节数组,此时就直接把这个大对象放入到老年代,不会经过新生代。

这么做就可以避免大对象在新生代,屡次躲过GC,还得把他们来复制来复制去的,最后才进入老年代,这么大的对象来回复制,是很耗费时间的。

什么时候对象会进入老年代?相关推荐

  1. jvm深入理解:内存分配与回收策略(优先在Eden分配、大对象直接进入老年代、长期存活的对象将进入老年代、动态对象年龄判定、空间分配担保)

    出入:深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) Java技术体系的自动内存管理,最根本的目标是自动化地解决两个问题:自动给对象分配内存以及自动回收分配给对象的内存. 象的内存分配,从 ...

  2. 深入jvm之对象如何进入老年代

    简介 我们知道,整个jvm堆分为新生代和老年代,新生代的对象在进行垃圾回收的时候,可能会进入到老年代,那么我们知道年轻代的对象是如何进入到老年代的吗? 年轻代空间分配 新生代分成Eden,Surviv ...

  3. jvm性能调优实战 - 28年轻代存活的对象太多老年代放不下触发Full GC日志怎么看

    文章目录 Pre Code JVM 参数 GC日志 日志分析 思考题 Pre 前两篇文章已经给大家分析清楚了对象是如何进入老年代的,接着我们就给大家演示一下,老年代的GC是如何触发的. Code JV ...

  4. 什么样的对象会进入老年代

    111 转载于:https://www.cnblogs.com/luao/p/10644285.html

  5. 【Flink】Flink 写入 Clickhouse 大对象直接进入老年代 导致OOM

    本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载. 文章目录 1.概述 2. 验证 3.转机 1.概述 事情是这样的.使用开源的修改 https://git ...

  6. JVM 老年代对象来源

    一般情况是四种,但是尤其以第一种来源最多 1.新生代对象每经历依次minor gc,年龄会加一,当达到年龄阀值会直接进入老年代.阀值大小一般为15 2.Survivor空间中年龄所有对象大小的总和大于 ...

  7. jvm性能调优实战 - 24模拟因动态年龄判断对象进入老年代的场景

    文章目录 Pre 动态年龄判定规则 动态年龄判定规则的部分示例代码 部分示例代码运行后产生的gc日志 完善示例代码 GC日志分析 Pre 上一篇文章我们已经带着大家初步分析了一次Young GC的日志 ...

  8. JVM学习笔记之-堆,年轻代与老年代,对象分配过程,Minor GC、Major GC、Full GC,堆内存大小与OOM,堆空间分代,内存分配策略,对象分配内存,小结堆空间,逃逸分析,常用调优工具

    堆的核心概述 概述 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域.Java堆区在JVM 启动的时候即被创建,其空间大小也就确定了.是JVM管理的最大一块内存空间. 堆内存的大小是可 ...

  9. 045、JVM实战总结:动手实验:自己动手模拟出对象进入老年代的场景体验一下(上)

    1.前文回顾 略.. 2.动态年龄判定规则 进入老年代的4个时机:1.年龄到了 2.动态年龄判断 3.Survivor 放不下 4.大对象(G1例外) 动态年龄判断:Young GC时,新对象(1岁) ...

最新文章

  1. linux 物理内存 分配,[linux物理内存分配]Linux系统下如何查看物理内存占用率
  2. [转]Linux下如何安装软件
  3. java web开发中Filter使用Annotation配置 (转载)
  4. mysql断电不受影响db引擎_一次服务器断电,造成innodb引擎表(日志表)损坏的解决办法...
  5. 静态页面被拦截解决办法
  6. 现共收到 5 个分组,其目的地址分别为: (1) 128.96.40.10 (2) 128.96.41.12 (3) 128.96.41.151 (4) 192.4.123.17 (5) 192.4.
  7. 华为手机免root改mac_拿到华为手机,这4个默认设置一定要改,不然流量电量很快被耗光...
  8. rocketmq 几种队列_进阶必看的 RocketMQ ,就这篇了
  9. 赛门铁克分家前利润暴跌
  10. [Vue]开发环境搭建
  11. matebook14支持触摸屏吗_新款华为MateBook 14 2020款评测——触控屏来!
  12. html 调用es2015模块,现在,在项目中直接部署ES2015+代码吧!
  13. 国产手机会使用鸿蒙,小米等国产手机会使用鸿蒙系统吗?
  14. 哪个城市美女最多?OPPO R11开启“谁是拍照King·仲夏之梦”活动
  15. python开发PC端桌面应用
  16. 4K显示器和防蓝光眼镜膜
  17. Elastic:配置 Elasticsearch 服务器 logs
  18. 面试题:Commonjs 和 Es Module区别
  19. 提高ubuntu下访问github的速度
  20. 微机原理—可编程计数器/定时器8253概念详解

热门文章

  1. [NOIP2002]矩形覆盖
  2. 开源社区Review代码步骤
  3. Typora一次编辑,知乎、CSDN等多平台快速发布:Typora + PicGo + 图床
  4. python中什么是主要数据类型_python中基本数据类型是什么
  5. golang mysql大量连接_golang mysql 如何设置最大连接数和最大空闲连接数
  6. 南通大学计算机学院何鹏,南通大学第一次自主评教授,加油!再评多点。
  7. html时间框自动更新,原生javascript实现自动更新的时间日期
  8. ROS-手势控制小海龟移动
  9. MySQL 可以用localhost 连接,但不能用IP连接的问题,局域网192.168.*.* 无法连接mysql...
  10. iOS vuforia 学习钻研(一)