Files
blog/src/content/posts/Java/JVM/Jvm分代回收机制.md
meowrain 7b7e32ddd4
Some checks failed
Clean ESA Versions on Main / clean-esa-versions (push) Has been cancelled
init
2026-01-02 00:03:49 +08:00

2.8 KiB
Raw Blame History

title, published, description, image, tags, category, draft, lang
title published description image tags category draft lang
Jvm分代回收机制 2025-07-18
分代回收
JVM
Java > JVM false

分代回收

juejin.cn

【GC系列】JVM堆内存分代模型及常见的垃圾回收器-腾讯云开发者社区-腾讯云

Eden与Survivor区 · Homurax's Blog

Java 虚拟机之垃圾收集

JVM内存分配策略

现代JVM堆内存的典型划分

  1. 年轻代Young Generation
  2. 老年代Old Generation
  3. 永久代/元空间Permanent Gen/Metaspace

JDK7堆空间内部结构

image.png

特点:

永久代位于堆内存中

字符串常量池存放在永久代

方法区使用永久代实现

JDK8堆空间内部结构

image.png

永久代被元空间替换,元空间不属于堆内存。

元空间使用本地内存

字符串常量池移至堆内存

方法区改由元空间实现。

年轻代与老年代

JVM 内置的通用垃圾回收原则。堆内存划分为 Eden、Survivor(年轻代) Tenured/Old (老年代)空间:

image.png

核心规则:

  1. 对象优先在Eden区分配
  2. 大对象直接进入老年代
  3. 长期存活对象进入老年代默认年龄阈值15
  4. 动态年龄判断Survivor区中相同年龄对象总和超过50%时候晋升)

在 JVM 中,年龄阈值Tenuring Threshold 是一个关键的参数它决定了新生代Young Generation中的对象需要经历多少次垃圾回收Minor GC仍然存活才会被晋升Promotion到老年代Old Generation

年轻代分为Eden区和Survivor区Survivor区又分为S0,S1S0,S1其中一个作为使用区from),一个作为空闲区(to)不固定可能S0是空闲区也可能是使用区 在Minor GC开始以后会回收Eden区和使用区中的对象逃过第一轮GC的在Eden区和使用区中的对象会被丢在空闲区,接下来将使用区和空闲区互换空闲区变使用区使用区变空闲区等待下一次Eden区满进行Minor GC以此不断循环每复制一次年龄就会 + 1

image.png

image.png

堆空间大小设置

image.png

image.png