• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

面试官:怎么做JDK8的垃圾收集器的调优(面试常问)

java 搞代码 4年前 (2022-01-09) 20次浏览 已收录 0个评论

看着面试官真诚的眼神,心中暗想看起来年纪轻轻却提出如此直击灵魂的问题。擦了擦额头上汗,我稍微调整了一下紧张的情绪,对面试官说:

在JDK8中有Serial收集器、Parallel收集器、CMS收集器、G1收集器这么几种收集器,需要根据实际硬件配置和业务需求进行选择调优。

如此浅显的回答,无法让面试官达到深入的要求,肯定不能满足面试官强烈的需求,果不其然面试官又追问到:如果是桌面应用,内存占用也就100MB,应该选择哪种垃圾收集器呢?我快速的回答:Serial收集器。看着面试官期待的眼神,我又详细解释到:

Serial收集器

Serial收集器是使用单线程处理所有的垃圾收集工作的,因为没有多线程的额外开销,相对来说也是比较有效的。所以,最适合单核CPU环境,因为本来也没办法利用多核。不过,当应用的使用的内存大小在100MB左右甚至更小的时候,在也适用于多核CPU的环境。

我一边说着,一边在纸上画了起来:

Client模式的JVM默认的垃圾收集器就是Serial收集器,或者可以使用JVM参数-XX:+UseSerialGC显式启用Serial收集器。

面试官又追问到:如果是要求高吞吐量的应用,使用较大内存并且有多核CPU,应该选择哪种垃圾收集器呢?我快速的回答:Parallel收集器。看着面试官期待的眼神,我又详细解释到:

Parallel收集器

Parallel收集器是类似于Serial收集器的分代收集器,主要区别是在垃圾回收的时候使用了多个线程进行加速垃圾的收集。所以,对于使用较大内存并且有多核CPU的环境更加适合。

我一边说着,一边在纸上画了起来:

Server模式的JVM默认的垃圾收集器就是Parallel收集器,也可以使用JVM参数-XX:+UseParallelGC启用。启用Parallel收集器后默认情况下,Minor垃圾收集(针对年轻代的垃圾收集)和Major垃圾收集(针对老年代的垃圾收集)都是并行执行的,可以进一步减少垃圾收集的开销。

Parallel收集器可以通过JVM参数指定最大垃圾收集暂停时间、吞吐量(用户代码运行时间/(用户代码运行时间+垃圾收集运行时间))和堆占用空间的目标值:

  • -XX:MaxGCPauseMillis:最大垃圾收集暂停时间,单位为毫秒,如:-XX:MaxGCPauseMillis=200,表示垃圾收集暂停时间最大为200毫秒。默认情况下,没有指定最大垃圾收集暂停时间。如果指定了暂停时间目标,则会调整堆大小与垃圾收集相关的其他参数,使垃圾收集的暂停时间短于指定值。这些调整可能导致降低应用的整体吞吐量,也有可能无法始终满本文来源gaodaimacom搞#代%码@网-足所指定的最大垃圾收集暂停时间目标。
  • -XX:GCTimeRatio:吞吐量大小,如:-XX:GCTimeRatio=19,表示将垃圾收集运行时间的目标设定为应用总运行时间(用户代码运行时间+垃圾收集运行时间)的1/(1+19),即5%。默认值为99,垃圾收集的目标时间占应用总运行时间的1/(1+99),即1%。
  • -Xmx:堆占用的最大占用空间,如:-Xmx1G,表示堆占用的最大占用空间为1GB。另外,Parallel收集器还有一个隐含的目标:只要满足其他目标的同时,把堆占用内存的大小最小化。

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:面试官:怎么做JDK8的垃圾收集器的调优(面试常问)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址