新生代和老年代介绍

简介:

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

相关推荐
java_nnnn3 小时前
文件操作和IO
java
lsylalalala3 小时前
多线程(4)
java·开发语言·多线程
吴声子夜歌3 小时前
Guava——散列
java·guava
用户3126874877203 小时前
AQS 到底怎么排队的?CLH 队列、state 与条件变量全链路拆解
java
Json____3 小时前
springboot开发高校选课管理系统:从零构建前后端分离的全栈实践
java·spring boot·后端·毕业设计·毕设·wwwoop.com
xcl09253 小时前
民宿预约系统开发实战:从需求分析到上线部署全流程解析
java·spring boot
步行cgn4 小时前
为何以继承方式引入SpringBoot
java·spring boot·后端
CoderYanger4 小时前
A.每日一题:1140. 石子游戏 II
java·程序人生·算法·leetcode·游戏·职场和发展·深度优先
禾高网络4 小时前
养老系统开发:背景、架构与养老行业展望
java·大数据·人工智能·小程序·架构
CCYe、4 小时前
新模型上线、旧模型下线:企业AI网关如何管住模型版本
java·网络·数据库·人工智能