当前位置: 首页 > 面试题库 >

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

司马羽
2023-03-14
问题内容

-Xmx当然,在32位系统中可以设置的理论最大堆值是2^32字节,但是通常(请参阅:了解最大JVM堆大小 -32 位vs64位),一个人不能使用全部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模式具有竞争优势。



 类似资料:
  • 问题内容: 我已经读到 32位Windows上的最大堆大小是〜1.5GB,这是由于JVM需要连续的内存。有人可以解释“连续内存”的概念吗,为什么Windows上最多只有1.5GB? 其次,那么64位Windows上的最大堆大小是什么?为什么与32位Windows上可用的最大堆大小不同? 问题答案: 32位/ 64位部分与Java无关 事实证明,32位系统中的内存位置由32位无符号整数引用。这最多允

  • 问题内容: 问题不在于32位操作系统的最大堆大小,因为32位操作系统的最大可寻址内存大小为4GB,而JVM的最大堆大小取决于可以保留多少连续可用内存。 我对了解在64位OS中运行的32位JVM的最大(理论上和实际可实现的)堆大小更感兴趣。基本上,我正在寻找类似于SO相关问题中的数字的答案。 至于为什么使用32位JVM而不是64位JVM,原因不是技术上的而是管理/官僚的-在生产环境中安装64位JVM

  • 在分析一个有问题的64位Java应用程序的过程中,我注意到分析器本身(YourKit)使用了大量的内存。我在YourKit启动脚本中得到的是: 天真地,假设有一些开销,这会让我猜测YourKit将使用最多可能超过4 GB的东西。然而,我在PS中实际看到的是: 这是近14 GB的虚拟大小和近8 GB的常驻大小 - 几乎是Java堆的3倍。 现在,我的开发盒上有足够的内存来运行它,但是回到我试图诊断的

  • 有很多关于堆大小的帖子和站点,但是没有一个提到在调用JVM时如何找出我可以保留的最大可能堆大小。 任务是用最大可用堆大小xmx=max动态启动我的jvm(这里不需要讨论这个任务的对象!)。 我们可以考虑读取当前可用或空闲的内存,并将该大小用于xms和XMX。但这不起作用。 调用Java程序时: Java-XMS1536M-XMX1536M myApp 导致: 选择您选中的应用程序大约需要的堆。并在

  • 问题内容: 当前,在我们的测试环境中,最大和最小JVM堆大小设置为相同的值,基本上与专用服务器计算机为我们的应用程序所允许的大小相同。这是性能最佳的配置,还是给JVM一个更好的范围? 问题答案: 设置- Xms的主要原因是,如果您在启动时需要一定的堆。(防止OutOfMemoryErrors在启动时发生。)如上所述,如果您需要启动堆来匹配最大堆,则是匹配它的最大时间。否则,您将不需要它。只是要求应

  • 问题内容: Java SE 6中Sun的JVM的默认最大堆大小是多少(即等效于设置-Xmx)? 貌似对Java SE 5与服务器级计算机,它的 小于物理内存的1/4或1GB。 额外的问题:对于IBM的JVM,您可以提出要求 您可以类似地询问Sun的JVM吗? 编辑 : 我使用Runtime.getRuntime()。maxMemory来确认min(物理内存/ 4,1G),这在Sun文档中已引用。