面临层出不穷的垃圾收集器我们如何选择?

32 篇文章 4 订阅
22 篇文章 2 订阅

如何选择垃圾收集器?

前面几章,我们已经聊过了七种垃圾收集器,当然,在比较新的JDK版本中,还有低延迟更高效的垃圾收集器,比如:Shenandoah 、 ZGC… 这些内存我们以后再做详细介绍。
那么,面临这么多的垃圾收集器,我们如何选择呢?

我们可以从三个方面去考虑:

  • 你的应用系统关注的主要矛盾点是什么?
    比如说,某个项目是一个数据分析类的应用系统,我们希望它能更迅速的获得执行结果,那么吞吐量就是主要矛盾点。可以使用Parallel Scavenge
    而假设,某个应用是一个Web应用,Stop The World可能会直接影响服务的质量,甚至可能导致调用超时,业务直接失败等严重的后果,那么低延迟就是我们的主要矛盾点。可以考虑CMS或者G1 或者Shenandoah 、 ZGC发展成熟后,使用这两种垃圾收集器.
    再比如,某个应用是一个桌面端的应用,它最大的问题是启动非常慢,不过我们只是希望它启动快一些,那么就可以考虑使用Serial,另外我们也可以使用-Xverify:none关闭掉校验过程。
    那么总而言之,我们应该找到应用程序最主要关注的矛盾点。并总结每款垃圾收集器所使用的场景而进行选择。
  • 选择那种垃圾收集器和你的基础设施也有很大关系。
    比如说,你的应用运行在一个单核的嵌入式机器上,那么使用Parallel Scavenge 和 Parallel Old 这种并行收集器 或者CMS 、G1这种并发收集器都不是特别合适
    又比如,你所使用的操作系统是windows,并且使用的是jdk11,那么就没有办法使用ZGC,因为jdk14 ZGC才支持windows操作系统。
  • 使用哪款垃圾收集器和你项目使用的JDK版本也有很大关系。
    比如你的项目使用的是JDK6 那么就没办法使用G1这款垃圾收集器了,又比如你使用的是Oracle JDK那么就没有办法使用Shenandoah 。

那总之,垃圾收集器的选择要考虑的因素非常多,在这里我们也只是从理论层次出发的一个分析,实际项目中,千万不能纸上谈兵,凭想象力去选择,还是要结合实际的测试结果选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值