gpt4 book ai didi

java - G1 比 Java 7 上的默认垃圾收集器慢

转载 作者:行者123 更新时间:2023-11-29 04:50:57 25 4
gpt4 key购买 nike

我一直在尝试在我的应用程序上使用 G1,并注意到与 java 7u91 上的默认垃圾收集器相比,启动应用程序需要更多时间。另一方面,G1 应该执行的集合较少。

G1 变慢有什么原因吗?我的应用程序在 Solaris 64 位版本上使用 128mb 的最小和最大堆,没有 VM 自定义参数。 (Java 服务器版)

最佳答案

and noticed it takes more time to start an application

这有几个原因

第一:在大多数情况下,默认收集器是并行收集器,也称为吞吐量收集器。就花在 GC 上的墙时间与花在应用程序代码上的墙时间而言,它是最有效的。[1]。它不必承担执行并发工作的额外成本。

G1 主要通过在部分并发集合上花费额外的 CPU 周期来优化大型堆上的暂停时间,这需要您有空闲的 CPU 周期。吞吐量只是次要目标。

其次:启用 G1 比使用的算法变化更多,许多默认设置也发生变化。

diff <(java -XX:+UseG1GC -XX:+PrintFlagsFinal) <(java -XX:+PrintFlagsFinal)显示其他标志如何更改

在 Java 8 上,有以下差异显着影响 GC 行为,其中包括:

<     uintx GCTimeRatio                               = 9                                   {product}
> uintx GCTimeRatio = 99 {product}
< uintx MaxGCPauseMillis = 200 {product}
> uintx MaxGCPauseMillis = 18446744073709551615 {product}

第三:应用程序启动并不是衡量任何事情的好方法,因为这是一个 transient 事件,堆仍必须稳定到其最终大小。收集器旨在实现稳态运行,并可能以不同方式处理此类瞬变。


在“旧 RISC 服务器”和 128 MB 的堆大小上,您肯定想坚持使用并行或串行收集器。这种配置无法从 G1 提供的功能中获益。

[1] 对于 CPU 周期而不是墙时间,它将是串行收集器。

关于java - G1 比 Java 7 上的默认垃圾收集器慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35421662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com