什么样的垃圾会进入到老年代?对象进入老年代的条件有三个,满足一个就会进入到老年代,

  • 1、躲过15次GC。每次垃圾回收后,存活的对象的年龄就会加1,累计加到15次(jdk8默认的),也就是某个对象躲过了15次垃圾回收,那么JVM就认为这个是经常被使用的对象,就没必要再带着年轻代中了。具体的次数可以通过 -XX:MaxTenuringThreshold 来设置在躲过多少次垃圾收集后进去老年代。
  • 2、动态对象年龄判断。规则:在某个 Survivor 中,如果有一批对象的大小总是大于该 Survivor 的 50%,那么此时大于等于该批对象年龄的对象机会会直接到老年代中。
  • 3、大对象直接进入老年代。-XX:PretenureSizeThreshold 来设置大对象的临界值,大于该值的就被认为是大对象,就会直接进入老年代。

针对上面的三点来逐一分析:

躲过15次 GC

这个没啥好说的,最好理解,就是在执行了15次GC后,对象依旧存活,那么就将其移动到老年代中去,没执行一次垃圾回收,存活的对象的年龄就+1,具体的执行次数可以通过:-XX:PretenureSizeThreshold参数来设置。

动态对象年龄判断

这就有点难理解了,不过在我 xx 面前,就一定会给你讲清楚。

再来看下这个规则:在某个 Survivor 中,如果有一批对象的大小总是大于该 Survivor 的 50%,那么此时大于等于该批对象年龄的对象机会会直接到老年代中

o(╥﹏╥)o 还是没理解。。。我们画图来理解试试

假设现在 To 里面的如图两个对象大小总和50 M,且都是3岁了,因为 To 是100 M,所以这个时候我们就说在某个 Survivor 中,如果有一批对象的大小总是大于该Survivor 的 50%。这个时候大于等于该批对象年龄的对象机会会直接到老年代中

再还换句话说就是:当前放对象的Survivor区域里(其中一块区域,放对象的那块s区),一批对象的总大小大于这块Survivor区域内存大小的50%(-XX:TargetSurvivor 修可以指定),那么此时大于等于这批对象年龄最大值的对象,就可以直接进入老年代了。

例如Survivor区域里现在有一比对象,年龄1+年龄2+年龄n的多个年龄对象总和超过了的多个年龄对象总和超过了区域的50%,此时就会巴年龄n(含)以上的对象都放入老年代)。这个规则其实是希望那些可能是长期存活的对象,尽早进入老年代。对象动态年龄判断机制一般是在 Minor GC 之后触发的

大对象直接进入老年代

这个就简单了,-XX:PretenureSizeThreshold 来设置大对象的临界值。如 -XX:PretenureSizeThreshold=1024 * 1024。即对象超过1M直接进入老年代。其实大对象直接进入到老年代还包含这种情况:那就是当 Eden 中执行了 Minor GC 后,存活的对象的大小是 超过了100M了(上图 from 和 to 都是100M)此时这些存活的对象也是直接进入到老年代。

说了半天对象都跑到老年代去了,那既然老年代这个牛逼,干嘛还分年轻代和老年代?年轻人,你不要急。后文我会全部道来。我们下面先来看看老年代空间如果不够用怎么办?

你这样的“垃圾“,就应该进入老年代!!!相关推荐

  1. Java垃圾回收之老年代垃圾收集器

    1.Serial Old 收集器(-XX: +UseSerialOldGC, 标记-整理算法) 单线程收集,进行垃圾收集时,必须暂停所有工作线程 简单高效,Client模式下默认的老年代收集器 2.P ...

  2. java 老年代回收_Java垃圾回收之老年代垃圾收集器

    1.Serial Old 收集器(-XX: +UseSerialOldGC, 标记-整理算法) 1.1 单线程收集,进行垃圾收集时,必须暂停所有工作线程 1.2 简单高效,Client模式下默认的老年 ...

  3. jvm性能调优 - 15JVM的老年代垃圾回收器CMS的缺点

    文章目录 Pre 并发回收垃圾导致CPU资源紧张 Concurrent Mode Failure问题 内存碎片问题 什么情况下触发老年代GC Pre 上篇文章用一步一图的方式给大家讲清楚了CMS垃圾回 ...

  4. jvm性能调优 - 14JVM的老年代垃圾回收器CMS原理

    文章目录 Pre CMS垃圾回收的基本原理 如果Stop the World然后垃圾回收会如何? CMS如何实现系统一边工作的同时进行垃圾回收? 初始标记 并发标记 重新标记 并发清理 对CMS的垃圾 ...

  5. java垃圾回收到老年代次数,Java垃圾回收之回收算法

    问题:谈谈你了解的垃圾回收算法 1.标记-清除算法(Mark and Sweep) 标记:从跟集合进行扫描,对存活的对象进行标记 清除:对堆内存从头到尾进行线性遍历,回收不可达对象内存 优点:简单 缺 ...

  6. jvm对象从新生代到老年代_JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代...

    内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...

  7. 023、JVM实战总结:一步一图:那JVM老年代垃圾回收器CMS工作时,内部又干了些啥?

    1.前文回顾 对象都分配在新生代的Eden区,然后每次垃圾回收之后,存活对象都进入Survivor区,下一次垃圾回收后的存活对象都进入另外一个Survivor区. 2.CMS垃圾回收的基本原理 采用标 ...

  8. Java当中jvm运行时区域新生代、老年代、永久代和Garbage Collection垃圾回收机制【杭州多测师】【杭州多测师_王sir】...

    1.本地方法栈和程序计数器 ==>偏底层一般不会接触到 2.方法区 ==>对应为永久代 3.虚拟机栈(stack) ==>对应为栈 4.堆(heap) ==>对应里面有新生代+ ...

  9. Java的垃圾回收机制、年轻代与老年代

    目录 1 被判定为垃圾的标准 2 判定对象是否为垃圾的算法 2.1 引用计数法 2.2 可达性分析算法 3 垃圾回收的算法 3.1 标记-清除算法(Mark and Sweep) 3.2 复制算法(C ...

最新文章

  1. 5008.工程师职场能力自测评估
  2. oj contest ranklist时间怎么算的_几次买入基金怎么算持有天数,加仓算在原来持有时间吗...
  3. Redhat7 samba配置(部分)
  4. “后完美日记”时代,橘朵、花知晓、funnyelves们还有机会吗?
  5. java代码如何避免死锁,Java可重入锁如何避免死锁
  6. NYOJ 562 盒子游戏
  7. c语言编简单博弈小游戏,[2018年最新整理]实验二:利用α-β搜索过程的博弈树搜索算法编写一字棋游戏.doc...
  8. 【Django】ImportError: cannot import name 'execute_manager'
  9. 每日一乐,健康多滋味~~
  10. hdoj1176 免费馅饼(dp 数塔)
  11. mysql 无法退出sql命令行编辑
  12. 背包之01背包、完全背包、多重背包详解
  13. CSDN 个人博客域名设置
  14. Vue开发环境搭建 VsCode
  15. Ajax+GridView+Xml的简易留言薄
  16. gdb: warning Can‘t open file /usr/lib/libstdc++.so.6.0.19 during file-backed mapping note processing
  17. jmeter--参数化--详解
  18. 科技论文的种类_如何快速对科技论文分类
  19. Vulnhub_hacksudo_fog
  20. 学会了这套方法论,你就能更高效地解决问题(2)

热门文章

  1. PHP 会话 线程 进程,php进程后台调用(多线程/进程)
  2. java合并多个表格为一个_多个DataTable的合并成一个新表
  3. 注意html的语言编码charset,HTML编码
  4. 由最小生成树算法改到最短路径算法代码----为了区分两者的区别
  5. windbg-调试技巧(定长、不定长参数thiscall平衡堆栈方式不同)
  6. 09. 用两个栈实现队列
  7. poj1328 区间贪心 挑战程序设计竞赛
  8. Python kafka操作实例
  9. shell遍历文件夹
  10. 以太网帧格式、最少字节介绍(arp)