扫码阅读
手机扫码阅读

GC是什么?为什么要GC?JVM 垃圾回收算法有哪些?

279 2024-07-17

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:GC是什么?为什么要GC?JVM 垃圾回收算法有哪些?
文章来源:
springboot葵花宝典
扫码关注公众号
Java垃圾回收机制总结

Java垃圾回收机制总结

1. GC是什么?为什么要GC?

Java语言中的垃圾回收机制(GC)旨在简化内存管理,使程序员专注于代码实现,而不必手动释放内存。GC自动识别并回收无用对象,从而避免内存溢出问题。类似机制也存在于其他语言如C#和Python。

2. 对象什么时候可以被回收?

当一个对象没有任何引用指向它时,该对象即为垃圾,可被垃圾回收器处理。垃圾的定位方式包括引用计数法和可达性分析算法,其中现代虚拟机主要采用可达性分析算法。

2.1 引用计数法

通过记录对象的引用次数来判断是否为垃圾,优点是实时性高,但无法解决循环引用问题,可能导致内存泄漏。

2.2 可达性分析算法

通过从根对象(GC Roots)开始分析对象的可达性,标记不可达对象为垃圾。此算法解决了引用计数法的循环引用问题。

3. JVM垃圾回收算法

3.1 标记清除算法

分标记和清除两个阶段,但可能导致内存碎片化,影响性能。

3.2 复制算法

将内存分为两块,使用其中一块,将存活对象复制到另一块清空后再交换。适合垃圾对象较多的场景,但内存利用率低。

3.3 标记整理算法

在标记清除算法基础上优化,通过移动存活对象解决内存碎片化问题,但效率较低。

3.4 分代收集算法

将堆分为新生代和老年代,并针对不同区域采用不同算法,减少垃圾回收的暂停时间。

4. JVM垃圾回收器

4.1 串行垃圾收集器

使用单线程进行垃圾回收,适用于小型应用,暂停时间长。

4.2 并行垃圾收集器

支持多线程并行回收,JDK8默认使用,适合多核环境。

4.3 CMS垃圾收集器

采用并发标记-清除算法,回收过程中应用仍可运行,停顿时间短,用户体验较好。

4.4 G1垃圾收集器

JDK9默认使用,将堆划分为多个区域,采用复制算法,兼顾响应时间和吞吐量。

5. 面试常见问题

5.1 Java垃圾回收机制

GC自动回收无用对象,减少内存管理负担。

5.2 对象回收条件

无任何引用指向的对象即为垃圾,可被回收。

5.3 JVM垃圾回收算法

包括标记清除、复制、标记整理和分代回收算法。

5.4 分代回收机制

新生代主要存放新对象,老年代存放生命周期长的对象。新生代采用复制算法,老年代采用标记整理算法。

5.5 新生代与老年代区别

新生代存储新对象,回收频率高;老年代存储长生命周期对象,回收频率低。

5.6 垃圾回收器类型

包括串行、并行、CMS和G1垃圾收集器。

5.7 GC类型

Minor GC:新生代回收;Major GC:老年代回收;Full GC:新生代与老年代整体回收,应尽量避免。

原创不易,感谢支持!

想要了解更多内容?

查看原文:GC是什么?为什么要GC?JVM 垃圾回收算法有哪些?
文章来源:
springboot葵花宝典
扫码关注公众号