面试题答案
一键面试Serial垃圾回收器
- 特点:单线程垃圾回收器,在进行垃圾回收时,会暂停所有应用线程。它简单高效,没有线程交互开销。
- 适用场景:适用于单核处理器环境,或对应用停顿时间要求不高、内存较小的应用。
- 性能表现:由于单线程回收,垃圾回收时间较长,应用停顿时间长,但简单性使得在小内存环境下可能有较好的吞吐量。
Parallel垃圾回收器
- 特点:多线程垃圾回收器,也叫吞吐量优先垃圾回收器。多个线程同时进行垃圾回收,在回收期间同样会暂停应用线程。目标是在较短时间内完成垃圾回收,以获得较高的吞吐量。
- 适用场景:适用于对吞吐量要求高,而对响应时间要求相对宽松的应用,如批处理任务。
- 性能表现:相比Serial回收器,由于多线程并行回收,在多核处理器环境下能显著减少垃圾回收时间,提高吞吐量,但停顿时间仍然存在。
CMS(Concurrent Mark Sweep)垃圾回收器
- 特点:以获取最短回收停顿时间为目标的垃圾回收器。它使用多线程并行进行垃圾回收,在标记和清除阶段可以与应用程序并发执行,减少应用停顿时间。不过,它会产生“浮动垃圾”,并且可能出现Concurrent Mode Failure问题。
- 适用场景:适用于对响应时间要求高的应用,如Web应用,希望在垃圾回收时尽可能减少对用户请求的影响。
- 性能表现:能有效减少应用停顿时间,提高响应速度,但由于并发执行,会占用部分CPU资源,可能对吞吐量有一定影响,同时由于“浮动垃圾”的存在,需要预留一部分内存空间。
G1(Garbage - First)垃圾回收器
- 特点:将堆内存划分为多个大小相等的Region,采用标记 - 整理算法,避免了内存碎片问题。可以预测停顿时间,能在有限的时间内尽可能多的回收垃圾。在回收过程中,可并发执行部分操作,减少应用停顿。
- 适用场景:适用于大内存、对响应时间和吞吐量都有一定要求的应用,特别是堆内存较大且对象分配频率高的场景。
- 性能表现:在大内存环境下,既能保证一定的吞吐量,又能较好地控制停顿时间,通过合理的Region划分和回收策略,在高并发场景下表现出色。
在高并发Web应用中选择和调优垃圾回收器
- 选择:
- 对于高并发Web应用,一般优先考虑CMS或G1垃圾回收器。如果应用对响应时间极其敏感,内存使用相对稳定且堆内存不是特别大,CMS可能是较好的选择,因为它能最大程度减少停顿时间。如果应用堆内存较大,对象分配和回收频繁,且对吞吐量也有一定要求,G1更合适,它在大内存下能兼顾响应时间和吞吐量。
- 调优:
- CMS调优:
- 通过
-XX:ConcGCThreads
参数调整并发垃圾回收线程数,根据服务器CPU核数合理设置,一般为CPU核数的1/4到1/2。 -XX:CMSInitiatingOccupancyFraction
参数设置CMS垃圾回收周期的启动阈值,根据应用内存使用情况调整,避免Concurrent Mode Failure。
- 通过
- G1调优:
-XX:G1HeapRegionSize
参数设置Region大小,根据堆内存大小选择合适的值,一般从1M到32M。-XX:MaxGCPauseMillis
参数设置最大停顿时间目标,G1会尽量满足这个目标,可根据应用需求设置,如100 - 200毫秒。-XX:G1NewSizePercent
和-XX:G1MaxNewSizePercent
参数调整新生代大小,控制新生代和老年代的比例,以优化垃圾回收性能。
- CMS调优: