JDK9之前java对象进入老年代的所有方式

简介: JDK9之前,虚拟机HotSpot的堆被划分为新生代和老年代,新生代中的对象年龄超过15,该对象就会被移入老年代,这种方式也是最常见的一种对象进入老年代的方式,但是对象进入老年代却不止这一种方式,下面总计下对象进入老年代的几种方式

前言:


JDK9之前,虚拟机HotSpot的堆被划分为新生代和老年代,新生代中的对象年龄超过15,该对象就会被移入老年代,这种方式也是最常见的一种对象进入老年代的方式,但是对象进入老年代却不止这一种方式,下面总计下对象进入老年代的几种方式


1.大对象直接进入老年代,可以通过参数-XX:PretenureSizeThreshold=3145726来设置大对象的大小,注意值只能是b为单位的数值。


2.年龄超过15的对象就会进入老年代,可以通过参数XX:MaxTenuringThreshold=15来设置进入老年代大小的值(设置为15,则16进入),一般都是使用默认值。


3.通过分配担保策略直接进入老年代,这是因为年轻代采用标记-赋值算法导致的问题,标记算法必须有担保策略(因为他空闲的空间可能不够存储存货的对象),老年代就是他的担保策略。


4.如果在Survivor(这里指单个Survivor,因为总有一个Survivor是空的)空间中相同年龄的所有对象大小的总和大于等于Survivor(单个)空间值的一半,那么只要年龄大于或等于该年龄(指相同年龄对象大小总和大于等于Survivor中的年龄)的对象,就可以直接进入老年代,而无需遵守年龄条件的制约。这句话有一点绕举个例子,新生代总共是10m空间,Eden是8m,每个Survivor是1m,那么如果有两个一岁的对象大于等于是512kb,那么这两个对象和年龄大于等于这两个对象的都会直接进入老年代。


相关文章
|
2天前
|
安全 Java 编译器
java中类与对象回顾总结-2
java中类与对象回顾总结
16 3
|
2天前
|
Java 编译器
java中类与对象回顾总结-1
java中类与对象回顾总结
14 3
|
1天前
|
消息中间件 Java RocketMQ
MQ产品使用合集之在同一个 Java 进程内建立三个消费对象并设置三个消费者组订阅同一主题和标签的情况下,是否会发生其中一个消费者组无法接收到消息的现象
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
10 1
|
2天前
|
Java 编译器
【Java开发指南 | 第一篇】类、对象基础概念及Java特征
【Java开发指南 | 第一篇】类、对象基础概念及Java特征
11 4
|
2天前
|
安全 Java 数据安全/隐私保护
Java一分钟之-Java反射机制:动态操作类与对象
【5月更文挑战第12天】本文介绍了Java反射机制的基本用法,包括获取Class对象、创建对象、访问字段和调用方法。同时,讨论了常见的问题和易错点,如忽略访问权限检查、未捕获异常以及性能损耗,并提供了相应的避免策略。理解反射的工作原理和合理使用有助于提升代码灵活性,但需注意其带来的安全风险和性能影响。
23 4
|
2天前
|
Java 开发框架 XML
JDK、JRE、Java SE、Java EE和Java ME有什么区别?
JDK、JRE、Java SE、Java EE和Java ME有什么区别?
|
2天前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
2天前
|
缓存 Java 程序员
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
|
2天前
|
Java
从源码出发:JAVA中对象的比较
从源码出发:JAVA中对象的比较
20 3
|
2天前
|
Java
JDK环境下利用记事本对java文件进行运行编译
JDK环境下利用记事本对java文件进行运行编译
15 0