【发布时间】:2016-07-09 20:15:11
【问题描述】:
您好,我有一个使用内存数据网格的 150GB 堆内存程序的案例。我有一些来自运营部门的疯狂要求,要使用一台机器。现在我们都知道如果并行垃圾收集器使用超过 150GB 会发生什么情况,如果调用 FULL GC 可能会进行数十分钟的垃圾收集。
我希望随着 Java 9 的到来,Shenandoah 低暂停 GC。不幸的是,据我所知,它没有在 Java 9 中列出。有人知道吗?
无论如何,我想知道 G1 GC 将如何处理这么多的堆内存。
最后一个问题。由于我有应该在 2 小时内完成的非交互式批处理应用程序,可以说。这里的主要目标是确保 Full GC 永远不会启动。如果我确保有足够的内存,可以说可以达到的最大堆是否为 150,并且我为其分配 250GB,我可以满怀信心地说 Full GC GC 永远不会介入或 ?通常如果新生代+老年代触及最大堆,就会触发full GC。可以用其他方式触发吗?
有一个重复的请求,我将尝试在这里解释为什么这个问题不是重复的。首先,我们谈论的是 150GB 堆,它为问题增加了完全不同的维度。其次,我不使用 RMI,因为它在提到的问题中,第三,我在两行之间询问有关 G1 垃圾收集器的问题。此外,一旦我们超出 32GB 堆障碍,我们将进入 64 位地址空间,你无法说服我关于 32GB 的问题相同 更不用说自从 Java 7 例如 PermSpace 不存在以来事情已经发生了一些变化。
【问题讨论】:
-
如果它是非交互式的,为什么它需要低暂停时间?并行 GC 应该为批处理任务提供最佳吞吐量,因为它不会受到并发收集器效率低下的影响。
-
是的,而且?您明确表示该应用程序是非交互式。这意味着响应能力——以及因此的暂停时间——应该并不重要。此外,暂停时间取决于内存带宽和核心数量,对于足够强大的机器,它不应该是“几十分钟”,而应该是“分钟”。
-
我喜欢这个以“现在我们都知道如果并行垃圾收集器使用超过 150GB 会发生什么”的前提。有多少读者真正体验过超过 150GB 的堆?其他人不知道,但可能只是听说过一些事情。我们有一个以约 70G 运行的应用程序,从未遇到过接近一分钟的 GC 暂停。从中推断,我认为没有理由让它变成“几十分钟”,堆大小翻倍……
-
他们的图表加起来还不到“几十分钟”。
标签: java performance garbage-collection jvm java-9