垃圾收集器选型因素

  • 应用程序的次要关注点是什么?如果是数据分析、科学计算类的工作,指标是尽快算出后果,那吞吐量就是次要关注点;如果是SLA利用,那进展工夫间接影响服务质量,重大的甚至会导致事物超时,这样提早就是次要的关注点;而如果是客户端利用或者嵌入式应用,那垃圾收集的内存占用则是侧重点。
  • 运行利用的基础设施如何?譬如硬件规格,要设计的零碎时x86-32/64、SPARC还是ARM/Aarch64;处理器的数量是多少,调配的内存大小;抉择的操作系统是Linux、Solaris还是Windos等。
  • 应用的JDK的发行版是什么?版本号是多少?是ZingJDK/Zulu、OracleJDK、OpenJDK、OpenJ9抑或是其余公司的发行版?该JDK对应了《Java虚拟机标准》的哪个版本?

一般来说收集器的抉择就从以上几点思考,举个例子,假如某个间接面向用户提供服务的B/S零碎筹备抉择垃圾收集器,一般来说延迟时间是这类利用的次要关注点,那么:

  • 如果你有短缺的估算单没有太多调优教训,那么一套代商业技术支持的专有硬件或者软件解决方案是不错的抉择,Azul公司以前主推的Vega零碎和当初主推的Zing VM是这方面的代表,这样你就能够应用传说中的C4收集器了。
  • 如果你尽管没有足够估算去应用商业解决方案,但可能掌控软硬件型号,应用较新的版本,同时又特地重视提早,那ZGC很值得尝试。
  • 如果你对还处于试验状态的收集器的稳定性有所顾虑,或者利用必须运行在Windos操作系统下,那ZGC就无缘了,试试Shenandoah吧。
  • 如果你接手的是遗留零碎,软硬件基础设施和JDK版本都比较落后,那就依据内存规模掂量一下,对于大略4GB到6GB以下的堆内存,CMS个别能解决的比拟好,而对于更大的堆内存,可重点考查一下G1。