你们线上用的什么垃圾收集器?为什么要用它?

优的重要性不可忽视,但实际上我们通常都使用默认设置。无论Java版本如何升级,如果我们使用的是JDK 1.8,默认的垃圾收集器是什么呢?

可以使用以下命令来查看:

java -XX:+PrintCommandLineFlags -version

可以看到有这么一行:

-XX:+UseParallelGC

UseParallelGC表示新生代使用的是Parallel Scavenge收集器,而老年代使用的是Parallel Old收集器。

为什么选择这个默认设置呢?主要是因为默认设置的垃圾收集器在通用场景下具有良好的性能。

当然,在面试中我们肯定不能仅仅给出这样的回答。

那么,Parallel Scavenge收集器有什么特点呢?

它被设计成高吞吐量的收集器。我们可以回答:考虑到我们的系统业务相对复杂,但并发并不是非常高,因此我们希望充分利用处理器资源,提高整体的吞吐量,所以选择了采用Parallel Scavenge + Parallel Old的组合。

当然,这个默认设置虽然也有合理性的解释,但并不总是令人满意。

还可以进一步解释:

我们采用了Parallel NewCMS组合的垃圾收集器。我们更加关注服务的响应速度,因此选择了CMS来降低停顿时间。

或者可以一步到位地回答:

我们在线上环境中采用了性能表现比较优秀的G1垃圾收集器。选择G1垃圾收集器是因为它不仅满足我们对低停顿时间的需求,而且解决了CMS收集器可能出现的浮动垃圾和内存碎片问题。

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题