欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 面试小札:什么是JavaGC

面试小札:什么是JavaGC

2025/2/21 3:04:23 来源:https://blog.csdn.net/m0_60235638/article/details/144126133  浏览:    关键词:面试小札:什么是JavaGC

定义
Java GC(Garbage Collection)即Java垃圾回收机制。它是Java虚拟机(JVM)提供的一种自动内存管理服务,用于回收不再被程序使用的对象所占用的内存空间。
工作原理
标记阶段
垃圾回收器首先会标记出内存中哪些对象是可达的(从根对象,如线程栈中的局部变量、静态变量等开始,通过引用关系遍历能够到达的对象)。
那些无法通过这种引用链到达的对象被标记为垃圾对象。
清除阶段
回收被标记为垃圾的对象所占用的内存空间,使这些内存可以被后续的对象分配使用。
压缩阶段(可选)
在一些垃圾回收算法中,如标记 - 整理算法,会在清除垃圾对象后,将存活的对象向内存一端移动,从而减少内存碎片,方便后续内存分配。
主要垃圾回收算法
标记 - 清除算法(Mark - Sweep)
这是最基础的垃圾回收算法。如前面所述,先标记出所有需要回收的对象,然后统一回收这些被标记的对象。其优点是实现简单,缺点是会产生内存碎片。
复制算法(Copying)
将内存划分为大小相等的两块,每次只使用其中一块。当进行垃圾回收时,把存活的对象复制到另一块内存中,然后把使用过的那块内存全部清理掉。这种算法简单高效,不会产生内存碎片,但会浪费一半的内存空间。
标记 - 整理算法(Mark - Compact)

标记过程和标记 - 清除算法类似,但后续不是简单地清除垃圾对象,而是将存活的对象向一端移动,然后清理掉边界以外的内存,既避免了内存碎片,又不需要像复制算法那样浪费一半的内存空间。
垃圾回收器类型
Serial GC(串行垃圾回收器)
它是单线程的垃圾回收器,在进行垃圾回收时,会暂停所有用户线程,直到垃圾回收完成。这种回收器简单高效,适用于单核处理器或者对暂停时间要求不高的小型应用。
Parallel GC(并行垃圾回收器)
可以利用多个处理器核心同时进行垃圾回收,它在执行垃圾回收时也会暂停所有用户线程,但是由于采用多线程并行回收,效率相对Serial GC更高,适用于多核处理器且对吞吐量要求较高的应用。
CMS(Concurrent Mark Sweep)GC
以获取最短回收停顿时间为目标的垃圾回收器。它在标记阶段采用并发标记的方式,尽量减少垃圾回收过程对用户线程的暂停时间。不过它也有一些缺点,如会产生内存碎片,在并发标记过程中可能会占用较多的CPU资源等。
G1(Garbage - First)GC
这是一款面向服务器端应用的垃圾回收器。它将堆内存划分为多个大小相等的Region,在回收时可以根据各个Region中垃圾对象的多少优先回收垃圾最多的Region。G1 GC结合了多种垃圾回收算法的优点,能在保证较高吞吐量的同时,尽量减少停顿时间。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词