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

2023-11-30

理论上可以设置的最大堆值-Xmx在32位系统中当然是2^32字节,但通常(参见:了解最大 JVM 堆大小 - 32 位与 64 位)一个人不能使用全部4GB。

对于64位机器上运行在64位操作系统中的64位JVM来说,除了理论限制之外还有什么限制吗?2^64字节还是 16 艾字节?

我知道由于各种原因(主要是垃圾收集),过大的堆可能不适合wise,但是根据阅读有关具有 TB RAM 的服务器的信息,我想知道什么是possible.


如果您想使用 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 的内存。

Hotspot JVM 中的压缩 oops

压缩的 oop 将托管指针(在 JVM 中的许多位置但不是所有位置)表示为 32 位值,必须将其缩放 8 倍并添加到 64 位基地址才能找到它们引用的对象。这使得应用程序能够寻址多达 40 亿个对象(不是字节),或高达约 32Gb 的堆大小。同时,数据结构紧凑性与ILP32模式具有竞争力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

64 位 JVM 的最大可能堆大小是多少? 的相关文章

随机推荐