新生代和老年代介绍

简介:

新生代和老年代是java虚拟机(jvm)中堆内存的两个主要部分,用于管理java对象的内存分配和回收;

1,新生代:

新生代(Young Generation):新生代主要用于存放新创建的对象。新生代又分为Eden区、Survivor0区和Survivor1区(或者称为From区和To区)。大部分情况下,新创建的对象首先会被分配到Eden区,当Eden区满时,会触发一次Minor GC(年轻代GC),将存活的对象移动到Survivor0区,同时清空Eden区。之后,若Survivor0区也满了,再次触发Minor GC,将存活的对象移动到Survivor1区,如此循环往复。

2,老年代

老年代(Old Generation):老年代主要用于存放经过多次Minor GC后仍然存活的对象。当新生代中的对象经过一定次数的GC后仍然存活,它们会被移动到老年代。老年代中的对象生命周期较长,因此触发Major GC(老年代GC)的频率相对较低。当老年代空间不足时,会触发Major GC,对老年代进行垃圾回收。

总结:

新生代和老年代的划分有助于提高垃圾回收的效率,因为大部分对象的生命周期较短,通过频繁地对新生代进行垃圾回收,可以快速回收短生命周期的对象,从而减少对老年代的垃圾回收压力。

3,Minor GC的过程

Minor GC的过程主要包括对新生代中的Eden区和Survivor区的垃圾回收。具体过程如下:
1,对象分配 :新创建的对象首先被分配到新生代的Eden区。

第一次GC触发:当Eden区满时,会触发第一次Minor GC。在这个过程中,存活的对象会被移动到Survivor0区,而死亡的对象则被清除。
2,第二次GC触发 :随着程序继续运行,如果Survivor0区也满了,将再次触发Minor GC。此时,上一次Survivor0区中存活下来的对象会被移动到Survivor1区,而新的Eden区中存活的对象也会被移动到Survivor0区。
3,重复上述过程 :这个过程会不断重复,每次Minor GC都会将存活的对象从一个Survivor区移动到另一个Survivor区,同时清空Eden区和被移出的Survivor区。
4,晋升老年代:如果一个对象在经历了一定次数的Minor GC后仍然存活(即经过多次Survivor区之间的移动),那么它会被晋升到老年代。这个晋升过程可能会触发Full GC,尤其是在老年代空间不足或者设置了某些JVM参数的情况下。

总的来说,Minor GC的目的是快速回收新生代中的短生命周期对象,以减少对老年代的压力。通过有效地管理新生代内存,可以提高垃圾回收的效率,从而提升整个Java应用程序的性能。

相关推荐
创码小奇客10 分钟前
MongoDB 时间序列:解锁数据时光机的终极指南
java·mongodb·trae
黯_森11 分钟前
Java面向对象
java·后端
代码小侦探12 分钟前
Java中以Maven方式引入Oracle JDBC Driver依赖的详解
java·oracle·maven
不畏惧的少年13 分钟前
AQS的底层实现原理
java
洛小豆36 分钟前
饭票、图书馆、GC:这样理解 Java 引用,谁还不会?
java·后端·面试
SimonLiu0091 小时前
清理HiNas(海纳斯) Docker日志并限制日志大小
java·docker·容器
带刺的坐椅1 小时前
开发 MCP Proxy(代理)也可以用 Solon AI MCP 哟!
java·ai·llm·solon·mcp·mcp-server·mcp-client
yuren_xia1 小时前
Spring XML 配置
xml·java·spring
小鸡脚来咯1 小时前
SpringBoot 常用注解大全
java
风铃儿~2 小时前
Java面试高频问题(26-28)
java·算法·面试