JVM–怎么选择一款合适的垃圾收集器
echo编辑整理。欢迎添加echo微信(微信号:t2421499075)交流学习。该文章不支持转载,主要内容来自读书笔记和网络博客,以及视频学习整理。
参考资料列表:
jdk不同版本的垃圾收集器:https://blog.csdn.net/weixin_34166847/article/details/94133616
鼓泡学院资料集
《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》 --周志明
衡量垃圾收集器的三项最重要的指标是:内存占用(Footprint)、吞吐量(Throughput)和延迟(Latency),但是我们仅仅知道这些,再去了解一下诸多的垃圾收集器,并不能有效合理的选择一款适合我们的垃圾收集器。在网上看到很多的文章描述,都是请根据每一个垃圾收集器的特性和对应的场景来使用。这一句话其实一点也没错,但是对于一个接触垃圾收集器不多的人来说,可能就会造成一脸懵。本文主要整理选择垃圾收集器的方法
越先进的垃圾收集器越好吗?
答案是否定的。在我们JDK不断更新的过程过,我们发现很多的垃圾收集器都是根据JDK的版本来调整的,比如G1就是JDK11的环境发布的,ZGC应该是JDK13的环境发布的。很显然,目前市场上很多公司还在使用JDK1.7、JDK1.8,使用JDK11的都很少,所以有可能牛头不对马嘴
垃圾收集器选择场景分析
- 应用程序需要尽快计算出结果,目标是能尽快计算出结果,那吞吐量就是最主要的点【吞吐量】。
- 如果是SLA应用,那停顿时间直接影响服务质量,严重的甚至会导致事务超时,关注点就是延迟【延迟】。
- 如果是客户端或者嵌入式应用,那垃圾收集器的内存占用则是不可忽视的【内存占用】。
垃圾收集器受哪些硬件条件影响
- 系统架构是x86-32/64、SPARC还是ARM/Aarch64
- 处理器的数量有多少
- 分配的内存大小
- 操作系统是Linux、Solaris、Windows
JDK版本对垃圾收集器的影响
- 【Serial收集器】JDK1.3.1前是HotSpot新生代收集的唯一选择
- 【ParNew】【Parallel Scavenge】JDK1.4的垃圾收集器
- 【CMS(Concurrent Mark Sweep)】【Serial Old】JDK1.5的垃圾收集器版本
- 【Parallel Old】JDK1.6的垃圾收集器版本
- 【G1】JDK11的垃圾收集器版本
- 【ZGC】JDK13的垃圾收集器版本
JDK供应商对垃圾收集器的影响
Shenandoah属于OpenJDK12的正式特性之一,Oracle并不支持