MST

星途 面试题库

面试题:Java垃圾回收调优之常见垃圾回收器

请列举几种常见的Java垃圾回收器,并简要说明它们各自的特点及适用场景。
34.8万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  • Serial收集器
    • 特点:单线程收集器,在进行垃圾回收时,必须暂停其他所有工作线程,直到垃圾回收完成。简单高效,内存碎片整理能力强。
    • 适用场景:适合客户端应用,单核环境,对响应时间要求不是特别高的场景,例如一些小型应用程序。
  • ParNew收集器
    • 特点:Serial收集器的多线程版本,使用多线程进行垃圾回收。可以与CMS收集器配合使用。在多CPU环境下,能有效利用多核优势,提升垃圾回收效率。同样会暂停所有工作线程。
    • 适用场景:适用于多CPU环境,希望在垃圾回收时能利用多核优势,但对暂停时间有一定容忍度的应用,常作为CMS收集器的年轻代收集器。
  • Parallel Scavenge收集器
    • 特点:也是多线程收集器,关注吞吐量,即运行用户代码时间与总运行时间的比值。通过调整参数,能控制吞吐量。自适应调节策略使得收集器可以根据运行情况自动调整堆大小等参数。同样会暂停工作线程。
    • 适用场景:适合后台运算而不需要太多交互的任务,例如批量数据处理、科学计算等对吞吐量要求高的场景。
  • Serial Old收集器
    • 特点:Serial收集器的老年代版本,单线程收集器,采用标记 - 整理算法,会暂停工作线程。主要用于Client模式下的老年代垃圾回收。
    • 适用场景:与Serial收集器类似,适合单核环境,客户端应用,作为Parallel Scavenge收集器老年代的备用收集器。
  • Parallel Old收集器
    • 特点:Parallel Scavenge收集器的老年代版本,多线程收集器,基于标记 - 整理算法,注重吞吐量。与Parallel Scavenge收集器配合,能在多CPU环境下提供高吞吐量的垃圾回收。会暂停工作线程。
    • 适用场景:适用于对吞吐量要求高的应用程序,特别是在服务器端,多CPU且大量数据需要处理的场景。
  • CMS(Concurrent Mark Sweep)收集器
    • 特点:以获取最短回收停顿时间为目标的收集器。采用标记 - 清除算法,并发收集,低停顿。但会产生内存碎片,可能导致在老年代空间不足时提前触发Full GC。
    • 适用场景:适用于对响应时间要求高的应用,如Web应用程序,希望在垃圾回收时尽可能减少对用户操作的影响。
  • G1(Garbage - First)收集器
    • 特点:将堆内存划分为多个大小相等的Region,基于Region进行垃圾回收。可以预测停顿时间,能在有限的时间内尽可能获取更高的收集效率。采用标记 - 整理算法,避免了大量内存碎片。可以并发与并行收集。
    • 适用场景:适用于大内存、多CPU的应用,对停顿时间有严格要求,如实时性应用,同时又希望有较高吞吐量的场景。