Java的JVM中的概念之——新生代和老年代

JVM新生代和老年代是JVM中非常重要的概念,那么他们在JVM中扮演者什么样的角色和含义呢?

在Java虚拟机(JVM)的垃圾回收(GC)中,内存被分为不同的区域,其中两个主要区域是新生代(Young Generation)和老年代(Old Generation),它们都属于堆内存(Heap)的一部分。

新生代(Young Generation):新生代是Java虚拟机中用于存放新创建的对象的内存区域。新生代被进一步划分为Eden区和两个Survivor区(通常为From和To区)。新创建的对象首先被分配到Eden区,当Eden区满时,会触发Minor GC(小型垃圾回收),将存活的对象转移到Survivor区。Survivor区也会随着对象存活时间增长而被回收或者晋升到老年代。

老年代(Old Generation) :老年代是Java虚拟机中用于存放长时间存活的对象的内存区域。当对象经过多次Minor GC仍然存活时,它们会被晋升(Promotion)到老年代。老年代的空间较大,用于存放存活时间较长的对象。当老年代空间满时,会触发Major GC(大型垃圾回收)或Full GC(全局垃圾回收),这会涉及到整个堆内存的垃圾回收操作。

新生代和老年代的划分是基于对象的生命周期假设:大多数对象都是短命的,只有少数对象会长时间存活。因此,新生代的空间较小,用于快速回收大量短命对象;而老年代的空间较大,用于存放存活时间较长的对象。这种分代策略可以提高垃圾回收的效率。

除了新生代和老年代之外,还有一个永久代(Permanent Generation)或元空间(Metaspace),这是早期JVM内存结构中的一个区域,用于存储类信息、方法区和常量池等数据。从JDK 8开始,永久代被元空间所取代,元空间并不在Java堆内存中,而是使用本地内存。

相关推荐
程序猿大帅1 小时前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java
程序员晓琪2 小时前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端
Flittly2 小时前
【AgentScope Java新手村系列】(11)中断与恢复
java·spring boot·spring
众少成多积小致巨2 小时前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
东坡白菜3 小时前
破局全栈:前端开发的Java入门实战记录—JPA(2)
java·后端
SimonKing9 小时前
艹,维护AI写的代码,我心态崩了......
java·后端·程序员
用户298698530149 小时前
Java Word 文档样式进阶:段落与文本背景色设置完全指南
java·后端
小bo波1 天前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
nanxun8862 天前
记一次诡异的 Docker 容器"串包"故障排查
java
用户1563068103512 天前
Day01 | Java 基础(Java SE)
java