gc在java中原理分析

admin 百科 19
Java垃圾回收本质是自动管理堆内存,通过可达性分析(以GC Roots为起点)判定对象存活,按分代理论将堆分为新生代(Eden+S0/S1)和老年代,分别采用复制、标记-清除/整理算法回收;Minor GC在Eden满时触发,Full GC在老年代不足等情况下触发。

gc在java中原理分析-第1张图片-佛山资讯网

Java 中的垃圾回收(GC)本质是自动管理堆内存,识别并回收不再被引用的对象,释放空间供新对象使用。核心在于判断“哪些对象可被回收”,以及“何时、如何回收”。

对象存活判定:可达性分析

Java 不采用引用计数法(因无法解决循环引用),而是基于可达性分析(Reachability Analysis):以一组称为“GC Roots”的对象为起点,向下搜索引用链;所有能被这条链触及的对象视为“存活”,其余即为可回收对象。

常见的 GC Roots 包括:

  • 虚拟机栈(栈帧中的局部变量表)中引用的对象
  • 方法区中类静态属性引用的对象
  • 方法区中常量引用的对象(如字符串常量池里的引用)
  • 本地方法栈中 JNI(即 Native 方法)引用的对象

分代收集理论:按对象生命周期分区域处理

HotSpot 虚拟机将堆分为新生代(Young Gen)老年代(Old Gen),依据是“绝大多数对象朝生夕灭”的经验规律。

立即学习“Java免费学习笔记(深入)”;

新生代进一步划分为 Eden 区 + 两个 Survivor 区(S0、S1)。对象优先分配在 Eden;一次 Minor GC 后,存活对象进入 Survivor;经历多次 Minor GC 仍存活(默认 15 次,由 -XX:MaxTenuringThreshold 控制),则晋升至老年代。

这种划分让 GC 更高效:新生代用复制算法(快、无碎片),老年代用标记-清除或标记-整理(空间利用率高)。

标签: java gc原理 cms 虚拟机 ai 内存占用 字符串常量

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~