新生代和老年代介绍

简介:

新生代和老年代是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应用程序的性能。

相关推荐
拼搏@4 分钟前
第十六天,7月10日,八股
java·mybatis
sagima_sdu6 分钟前
MacBook Air M4 安装 VMware Fusion Pro
jvm·macos
Sylvia-girl4 小时前
Java——抽象类
java·开发语言
Touper.6 小时前
Redis 基础详细介绍(Redis简单介绍,命令行客户端,Redis 命令,Java客户端)
java·数据库·redis
m0_535064607 小时前
C++模版编程:类模版与继承
java·jvm·c++
虾条_花吹雪7 小时前
Using Spring for Apache Pulsar:Message Production
java·ai·中间件
tomorrow.hello7 小时前
Java并发测试工具
java·开发语言·测试工具
Moso_Rx8 小时前
javaEE——synchronized关键字
java·java-ee
张小洛8 小时前
Spring AOP 是如何生效的(入口源码级解析)?
java·后端·spring
DKPT8 小时前
Java设计模式之行为型模式(观察者模式)介绍与说明
java·笔记·学习·观察者模式·设计模式