gpt4 book ai didi

java - -Xmx 的大值会推迟垃圾收集吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:21 29 4
gpt4 key购买 nike

我有很多 JVM 在 Linux Redhat 上运行,具有 32GB 的物理内存和 32GB 的虚拟内存。这些 JVM 配置为具有超过 32GB 的 Xmx 总值,并且可能让 Linux 使用了它的虚拟内存。
我的问题是,如果我指定的 Xmx 超过所需的堆大小,它会延迟垃圾收集并因此分配比必要更多的堆大小吗?这样就会导致操作系统从其虚拟内存中分配内存,从而导致性能下降。

最佳答案

JVM 在启动时保留最大堆大小(以及其他内存区域)。这意味着如果最大堆大小为 32 GB,它将使用大约 33-35 GB 的虚拟内存,包括共享库线程等。

毫无值(value)的是,如果您将最大堆大小设置为 32 GB,则它必须使用 64 位引用,并且最终可用内存少于最大堆为 24 GB 的 JVM,它将使用 32-位引用。有人估计,如果您将堆大小设置为 32 Gb 或更大,则必须将其增加到 48 GB 以获得更多可用内存。

考虑到您机器的大小,我建议您将堆限制为 24 GB(或更少),并尽可能使用堆外内存,因为这可以同时具有性能优势和更大的可扩展性。

如果你有一个低 GC 程序并且你想避免收集,你可以创建一个巨大的伊甸园大小和每天一次或每周一次的 GC。为此,您必须将丢弃的垃圾保持在最低限度,并且您可以创建一个大小为 20 GB 的伊甸园,在这种情况下,只要您每天创建的垃圾少于 20 Gb,就可以避免触发任何 GC(即使是次要的)并运行完整的 GC 作为夜间维护任务。例如凌晨 2 点。

如果您使用大堆,您希望不惜一切代价避免使用交换。这是因为 GC 需要对堆进行随机访问,一旦触发一个足够大的空间来进行交换,您的机器就会抖动很长时间(可能是几个小时),并且可能会锁定。您甚至可能需要重新启动才能让您的机器正常运行。 (很难杀死处于这种状态的进程/机器)

关于java - -Xmx 的大值会推迟垃圾收集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13697433/

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