繁体   English   中英

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

[英]What is the largest possible heap size with a 64-bit JVM?

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

对于在64位计算机上的64位OS中运行的64位JVM,除了2^64字节或16艾字节的理论限制外,是否还有其他限制?

我知道由于种种原因(主要是垃圾回收),过大的堆可能不是明智的选择 ,但是鉴于阅读了有关具有terrabytes 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的内存。

热点JVM中的压缩oop

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

答案显然取决于JVM实现。 Azul声称他们的JVM

可以扩展到超过1/2 TB的内存

所谓“可以规模化”,是指“运转得井井有条”,而不是“完全运转”。

Windows对每个进程都施加了内存限制,您可以在此处查看每个版本的内存限制

看到:

User-mode virtual address space for each 64-bit process; With IMAGE_FILE_LARGE_ADDRESS_AWARE set (default): x64: 8 TB Intel IPF: 7 TB 2 GB with IMAGE_FILE_LARGE_ADDRESS_AWARE cleared

我尝试了-Xmx32255M接受压缩的oops。

对于在64位计算机上的64位OS中运行的64位JVM,除了2 ^ 64字节或16艾字节的理论限制外,是否还有其他限制?

您还必须考虑硬件限制。 尽管指针可能是64位的,但当前CPU只能寻址不到2 ^ 64字节的虚拟内存

使用未压缩的指针,热点JVM需要为其堆提供连续的虚拟地址空间块。 因此,仅次于硬件的第二大障碍是提供如此大块数据的操作系统,并非所有的OS都支持。

第三是实用性。 即使您可以拥有那么多的虚拟内存,也并不意味着CPU支持那么多的物理内存,而没有物理内存,您最终将不得不进行交换,这将对JVM的性能产生不利影响,因为GC通常必须占用很大一部分堆。

正如其他答案所提到的,压缩的oops:通过将对象对齐提高到8个字节以上,压缩的oops的限制可以增加到32GB以上

从理论上讲,一切皆有可能,但现实中您发现的数字比您预期的低得多。 我一直在尝试经常处理服务器上的巨大空间,发现即使服务器可以拥有大量内存,但令我惊讶的是,大多数软件实际上无法在实际情况下解决该问题,原因仅在于cpu的速度不足以真正解决这些问题。 你为什么说正确? 时间就是我工作过的每台巨大机器的无尽崩溃。 因此,我建议不要仅仅因为您能就解决大量问题而过度,而应使用您认为可以使用的内容。 实际值通常远低于您的预期。 当然,我们当中没有一个人真正在家中使用hp 9000系统,实际上你们中的大多数人几乎都将接近家庭系统的容量。 例如,大多数用户的系统内存不超过16 Gb。 当然,有些休闲游戏玩家每月会使用工作站玩一次游戏,但我敢打赌这是一个很小的百分比。 因此,脚踏实地意味着我将在8 Gb 64位系统上处理不超过512 mb的堆空间,或者如果您过度使用,则尝试1 Gb。 即使这些数字纯属杀伤力,我也可以肯定。 我一直在游戏过程中监视内存使用情况,以查看寻址是否会产生任何变化,但当我处理低得多或大得多的值时根本看不到任何变化。 即使在服务器/工作站上,无论我设置多大的值,性能也没有明显变化。 但这并不意味着某些jave用户可能能够利用更多的寻址空间,但是到目前为止,我还没有看到任何应用程序需要这么多的东西。 当然,我认为如果Java实例用完足够的堆空间来使用它们,它们的性能差异将很小。 到目前为止,我什么都没有找到,但是如果您设置了太多的堆空间,那么实际安装的内存不足会立即导致性能下降。 当您有一个4 Gb系统时,您很快就会耗尽堆空间,然后会看到一些错误和速度下降,因为人们处理了太多空间,而这些空间实际上是系统中不可用的,因此os开始解决驱动器空间以弥补不足因此它开始交换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM