gpt4 book ai didi

java - 64 位 JVM 的最大可能堆大小是多少?

转载 作者:IT老高 更新时间:2023-10-28 21:19:27 25 4
gpt4 key购买 nike

在 32 位系统中可以用 -Xmx 设置的理论最大堆值当然是 2^32 字节,但通常(见:Understanding max JVM heap size - 32bit vs 64bit)一个人不能用完所有的 4GB。

对于在 64 位机器上运行在 64 位操作系统中的 64 位 JVM,除了 2^64 字节或 16 EB 的理论限制之外,还有其他限制吗?

我知道由于各种原因(主要是垃圾收集),过大的堆可能不是明智的,但鉴于阅读了有关具有 TB 级 RAM 的服务器的信息,我想知道什么是 >可能

最佳答案

如果您想使用 32 位引用,则您的堆被限制为 32 GB。

但是,如果您愿意使用 64 位引用,则大小可能会受到操作系统的限制,就像使用 32 位 JVM 一样。例如在 Windows 32 位上,这是 1.2 到 1.5 GB。

注意:您会希望您的 JVM 堆适合主内存,最好是在一个 NUMA 区域内。在更大的机器上,这大约是 1 TB。如果您的 JVM 跨越 NUMA 区域,则内存访问,特别是 GC 将花费更长的时间。如果您的 JVM 堆开始交换,则可能需要数小时才能进行 GC,甚至可能使您的机器无法使用,因为它会破坏交换驱动器。

注意:即使在堆中使用 32 位引用,您也可以访问较大的直接内存和内存映射大小。即使用远高于 32 GB。

Compressed oops in the Hotspot JVM

Compressed oops represent managed pointers (in many but not all places in the JVM) as 32-bit values which must be scaled by a factor of 8 and added to a 64-bit base address to find the object they refer to. This allows applications to address up to four billion objects (not bytes), or a heap size of up to about 32Gb. At the same time, data structure compactness is competitive with ILP32 mode.

关于java - 64 位 JVM 的最大可能堆大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7663174/

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