在Java9中,G1 GC是默认的垃圾收集器。到目前为止,我听说过有些人更喜欢CMS垃圾收集器 over G1GC,因为它看起来不稳定,并且有一些令人讨厌的bug。
ParallelGC发生了什么事(这些天没有嗡嗡声)?有没有比CMS/G1更喜欢ParallelGC的用例?
另外,是否存在SerialGC可以执行所有这些并行收集器的情况?
发布于 2019-02-10 10:53:05
串行收集器
主要用于单cpu机.
算法:
它使用单个线程来处理堆,并在任何gc期间执行停止世界暂停.把它当成玩具吧。
这对于客户机类计算机( windows或单cpu计算机上的32位jvm )来说是默认的。
平行收集器
算法:
它使用多个gc线程来处理堆,并在任何gc期间执行停止世界暂停.
<= Java 8
,这是服务器类计算机(多cpu类unix机器或任何64位jvm)的默认设置。
CMS收集器
它旨在消除与并行和串行收集器的完整gc相关联的长暂停。
算法:
它使用一个或多个gc线程定期扫描老一代,并丢弃未使用的对象,暂停时间很短,但占用更多的cpu时间。
警告:从14
开始,删除了。
G1收集器
它是低暂停/服务器风格的gc,主要用于大型堆(> 4Gb)。
算法:
自Java以来,这是服务器类计算机(多cpu类9
或任何64位jvm)的默认设置。
为什么使用G1作为缺省值?
主要原因是减少gc暂停时间,尽管总体吞吐量可能会降低。
发布于 2019-02-11 19:53:54
您可以阅读文档Java平台,标准版HotSpot虚拟机垃圾收集优化指南-Java 9
在Java9中不推荐这个收集器。
此收集器适用于喜欢更短时间的垃圾收集暂停并能够与垃圾收集共享处理器资源的应用程序。
摘要:
问答:
对于大多数应用程序来说,G1收集器足够稳定。我在许多应用程序中都使用了G1收集器,它们都工作得很好。如果您可以将java9升级到Java11,那么它工作得更好,bug也更少。
是。有些应用程序需要更多的吞吐量,并且不关心使用并行收集器的暂停时间,这样会更好。例如,批处理任务、脱机作业、计算任务。
如果您在嵌入式系统上运行JVM,或者使用一个或两个CPU的系统,那么串行GC会更好。
最后,G1和CMS:在大多数情况下,G1可以代替CMS。在这种情况下,最好使用G1:
发布于 2019-12-23 03:45:14
使用系列:
使用并行:
https://stackoverflow.com/questions/54615916
复制