jvm 垃圾回收流程

JVM(Java Virtual Machine,Java虚拟机)的垃圾回收(Garbage Collection,GC)是自动管理内存的过程,它负责回收不再被引用的对象占用的内存空间。垃圾回收的核心是确定哪些对象不再被使用,以便释放其占用的内存。在JVM中,垃圾回收主要基于对象的可达性分析。

对象的可达性分析
对象的可达性分析是垃圾回收的第一步。JVM通过一系列的“根”对象(如静态变量、线程栈中的引用等)作为起始点,通过这些根对象向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连时,说明该对象是不可达的,即该对象不再被使用,可以被回收。

伊甸园(Eden Space)
新生代(Young Generation)被划分为三个区域:伊甸园(Eden)、幸存者0区(Survivor From)和幸存者1区(Survivor To)。新创建的对象首先会被分配到伊甸园区。当伊甸园空间不足时,会触发一次Minor GC(年轻代垃圾回收)。在这次GC中,存活的对象会被移动到幸存者区,而死亡的对象则会被回收。

幸存者区(Survivor Space)
幸存者区分为幸存者0区和幸存者1区。在每次Minor GC后,存活的对象会被移动到其中一个幸存者区。这两个区的主要作用是担任伊甸园和老年代之间的缓冲区,减少老年代的对象分配频率。在经历一定次数的Minor GC后,如果对象仍然存活,那么它会被移动到老年代。

老年代(Old Generation)
老年代用于存储长时间存活的对象。当对象在新生代中经历了一定次数的GC后仍然存活,或者新创建的对象大小超过了新生代分配的最大阈值,那么这些对象会被直接分配到老年代。老年代的垃圾回收频率较低,因为其中的对象存活时间较长。当老年代空间不足时,会触发一次Major GC(全堆垃圾回收),回收老年代和新生代中的不再使用的对象。

流程总结

  1. 对象首先被分配到伊甸园区。
  2. 当伊甸园空间不足时,触发Minor GC。
  3. 在Minor GC中,存活的对象被移动到幸存者区,死亡的对象被回收。
  4. 经历一定次数的Minor GC后,仍然存活的对象会被移动到老年代。
  5. 当老年代空间不足时,触发Major GC,回收老年代和新生代中的不再使用的对象。

需要注意的是,垃圾回收的具体实现和流程可能会因JVM版本、垃圾回收器类型等因素而有所不同。以上描述的是一种常见的垃圾回收流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值