java垃圾回收机制介绍
Java垃圾回收机制(Garbage Collection, GC)是Java编程语言中的一项重要特性,它自动管理内存,释放不再使用的对象
1. 堆(Heap):
• Java虚拟机(JVM)中用于存储对象实例的内存区域。
• 垃圾回收主要发生在堆上。
2. 年轻代(Young Generation):
• 堆的一部分,用于存放新生成的对象。
• 通常分为Eden区和两个Survivor区(S0和S1),通过复制算法进行垃圾回收。
3. 老年代(Old Generation/Tenured Generation):
• 堆的另一部分,用于存放经过多次年轻代GC后仍然存活的对象。
• 通常使用标记-清除或标记-整理算法进行垃圾回收。
4. 永久代(PermGen)/元空间(Metaspace)(Java 8及以后):
• 在Java 8之前,永久代用于存储类的元数据信息(如类名、访问修饰符、常量池等)。
• Java 8及以后,永久代被元空间取代,元空间使用本地内存(Native Memory)而不是堆内存来存储类的元数据信息。
5. 垃圾回收器(Garbage Collector, GC):
• 实现垃圾回收算法的组件,负责自动回收不再使用的内存。
• Java提供了多种垃圾回收器,如Serial GC、Parallel GC、CMS GC、G1 GC等。
6. 引用计数(Reference Counting):
• 一种简单的垃圾回收算法,通过维护每个对象的引用计数来判断对象是否可以被回收。
• 但由于无法解决循环引用问题,在Java中并未采用。
7. 可达性分析算法(Reachability Analysis Algorithm):
• Java采用的垃圾回收判断算法,通过从根节点(GC Roots)开始遍历对象图,判断对象是否可达。
• 不可达的对象被认为是垃圾,可以被回收。
8. 标记-清除(Mark-Sweep):
• 一种垃圾回收算法,首先标记所有可达的对象,然后清除所有未标记的对象。
• 但会导致内存碎片问题。
9. 标记-整理(Mark-Compact):
• 在标记-清除的基础上,对存活的对象进行整理,消除内存碎片。
10. 复制算法(Copying Algorithm):
• 将内存分为两块,每次只使用其中一块分配对象。
• 当这块内存用完时,复制存活的对象到另一块内存,并清空当前块。
• 年轻代通常使用这种算法。
11. 分代回收(Generational Garbage Collection):
• 根据对象的生命周期长短,将堆内存划分为不同的代(年轻代、老年代),并根据代的特性采用不同的垃圾回收策略。
12. 并发(Concurrent)/并行(Parallel)垃圾回收:
• 并发垃圾回收:垃圾回收线程与应用线程同时运行,减少停顿时间。
• 并行垃圾回收:使用多个垃圾回收线程同时执行垃圾回收任