Java虚拟机学习(4):对象内存分配与回收
2023-09-14 09:00:06 时间
对象优先在Eden上分配
大多数情况下,对象优先在新生代Eden区域中分配。当Eden内存区域没有足够的空间进行分配时,虚拟机将触发一次 Minor GC(新生代GC)。Minor GC期间虚拟机将Eden区域的对象移动到其中一块Survivor区域。
大对象直接进入老年代
所谓大对象是指需要大量连续空间的对象。虚拟机提供了一个XX:PretenureSizeThreshold参数,令大于这个值的对象直接在老年代中分配。
长期存活的对象将进入老年代
虚拟机采用分代收集的思想管理内存,那内存回收时就必须能识别那些对象该放到新生代,那些该到老年代中。为了做到这点,虚拟机为每个对象定义了一个对象年龄Age,每经过一次新生代GC后任然存活,将对象的年龄Age增加1岁,当年龄到一定程度(默认为15)时,将会被晋升到老年代中,对象晋升老年代的年龄限定值,可通过-XX:MaxTenuringThreshold来设置。
Minor GC 和Full GC区别
新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为对象大多都具备朝生夕灭特性,所以Minor GC非常频繁,回收速度也比较快。
老年代GC(Major GC / Full GC):指发生在老年代中的GC,出现Major GC后,经常会伴随至少一次的 Minor GC。Major GC的速度一般会比Minor GC慢10倍以上。
相关文章
- jvm内存模型、jvm内存结构、Java内存结构、Java内存模型(JMM)、Java对象模型的区别(吐血研究整理)
- java栈内存初始化,阿里面试官:小伙子,你给我说一下JVM对象创建与内存分配机制吧…
- 深入理解 Java 对象的内存布局
- java单例模式_Java单例模式
- 干货分享!JAVA诊断工具Arthas在Rainbond上实践~
- java md5加密源码_javaMD5加密源码
- Java版五子棋小游戏(java控制台)
- 【说站】java调用shell脚本的方法
- 【说站】Java内存交互如何操作
- Java重置_java设置定时任务一小时执行一次
- Jakarta EE 10发布,开启云原生Java时代
- JAVA项目启动脚本编写及JVM启动参数的一些笔记
- 一文搞懂 Java 中的内存泄漏(Memory Leak)
- java代码解压rar文件时报错,badRarArchive详解编程语言
- 数据库轻松搞定:用Java访问Oracle数据库(java访问oracle)
- 运行Linux中定时运行Java程序的实用方法(linux定时java)