面试题答案
一键面试性能瓶颈和问题
- 长时间停顿:串行垃圾回收在进行垃圾回收时,会暂停所有应用线程,这在高并发场景下会导致较长时间的服务不可用,影响用户体验。
- 吞吐量降低:由于垃圾回收线程独占 CPU,应用线程执行时间减少,整体吞吐量会受到影响,尤其是在垃圾回收频繁时。
- 内存压力大:串行回收适用于小堆内存,在高并发应用中,若堆内存较大,垃圾回收时间会显著增加,同时可能导致频繁的 Full GC,进一步降低性能。
优化措施或替代方案
- 使用并行垃圾回收器(Parallel GC)
- 措施:通过 -XX:+UseParallelGC 开启。它采用多线程进行垃圾回收,能显著减少垃圾回收停顿时间,提升吞吐量。
- 影响:可能会增加 CPU 资源的消耗,因为多个垃圾回收线程同时工作。对于 CPU 资源紧张的系统,可能会对其他应用产生影响。
- 使用并发标记清除垃圾回收器(CMS GC)
- 措施:通过 -XX:+UseConcMarkSweepGC 开启。它在标记和清除阶段与应用线程并发执行,减少停顿时间。
- 影响:会占用一部分堆内存用于并发标记等操作,可能导致可用堆内存减少。同时,可能会产生浮动垃圾,需要更多的调优来避免 Full GC 的频繁发生。
- 使用 G1 垃圾回收器
- 措施:通过 -XX:+UseG1GC 开启。G1 将堆内存划分为多个区域,采用并行与并发相结合的方式进行垃圾回收,能更好地控制停顿时间,尤其适用于大堆内存。
- 影响:G1 的内存管理相对复杂,可能需要更多的调优工作。在某些场景下,初期可能会有一定的性能开销用于区域划分和回收策略调整。