扫码阅读
手机扫码阅读

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

68 2024-07-17

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

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

Java垃圾回收机制简介

Java中的垃圾回收机制(GC)允许程序员专注于代码实现而不必担心内存释放。GC自动识别并释放不再被引用的对象内存。这不仅适用于Java,还包括C#、Python等语言。

对象何时可被回收

对象在没有任何引用指向它时成为垃圾,并可能被回收。垃圾识别有两种方式:引用计数法和可达性分析算法。引用计数法通过对象头上的引用次数判断,但存在循环引用问题。可达性分析则通过检查对象是否与根对象(如局部变量、静态方法等)有直接或间接的引用来确定垃圾对象。

JVM垃圾回收算法

主要有标记清除、复制、标记整理和分代收集算法。标记清除算法标记并清理垃圾,但效率低且会产生内存碎片。复制算法通过将存活对象复制到另一块内存来清理垃圾,适用于垃圾对象多的情况。标记整理算法则在标记清除的基础上,通过移动存活对象来解决内存碎片问题。

分代收集算法

基于对象存活周期的不同,Java堆分为新生代和老年代。新生代分为Eden、S0和S1区,采用复制算法进行回收。老年代使用标记-整理或标记-清除算法。新生代垃圾回收称为Minor GC,而老年代则称为Major GC。Full GC涉及新生代和老年代的完整垃圾回收,应尽量避免因其暂停时间长。

JVM垃圾回收器

JVM实现了多种垃圾回收器,包括串行、并行、CMS和G1。串行回收器适合单线程环境,而并行回收器可在多线程下工作。CMS回收器以最短停顿时间为目标。G1回收器用于新生代和老年代,特点是在并行回收的同时考虑响应时间与吞吐量。

Minor GC、Major GC和Full GC

Minor GC发生在新生代,速度快且暂停时间短。Major GC发生在老年代,通常在Minor GC后空间不足时触发,速度慢且暂停时间长。Full GC是最全面的垃圾回收,包括新生代和老年代,应避免因其暂停时间最长。

本文结束语强调了原创不易,鼓励读者关注、点赞和分享。

想要了解更多内容?

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

主要分享JAVA技术,主要包含SpringBoot、SpingCloud、Docker、中间件等技术,以及Github开源项目

266 篇文章
浏览 21.3K
加入社区微信群
与行业大咖零距离交流学习
软件研发质量管理体系建设 白皮书上线