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

了解最大JVM堆大小-32位和64位

魏襦宗
2023-03-14
问题内容

我已经读到 32位Windows上的最大堆大小是〜1.5GB,这是由于JVM需要连续的内存。有人可以解释“连续内存”的概念吗,为什么Windows上最多只有1.5GB?

其次,那么64位Windows上的最大堆大小是什么?为什么与32位Windows上可用的最大堆大小不同?


问题答案:

32位/ 64位部分与Java无关

事实证明,32位系统中的内存位置由32位无符号整数引用。这最多允许2 ^ 32个可能的存储位置。由于每个位置存储1个字节,因此您可以选择2 ^ 32个字节或4 GB。

在64位系统上,有2 ^ 64个位置,即16艾字节。

现在,在Windows中,连续的部分成为一个大问题,但这就是Windows的工作方式。这个想法是您需要为堆提供一个完整的“不间断”范围。可悲的是,Windows在中间的某个地方分配了一些内存。基本上,这将使您剩下大约一半的左侧或一半的右侧(大约1.5-2GB的块)来分配堆。



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

  • 问题内容: 当然,在32位系统中可以设置的理论最大堆值是字节,但是通常(请参阅:了解最大JVM堆大小 -32 位vs64位),一个人不能使用全部4GB。 对于在64位计算机上的64位OS中运行的64位JVM,除了理论上的字节数限制或16艾字节之外,是否还有其他限制? 我知道由于种种原因(主要是垃圾回收),过大的堆可能不是 明智的选择 ,但是鉴于阅读了有关具有terrabytes RAM的服务器的信

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

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

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

  • 问题内容: 我试图以编程方式找出用于调用我的程序的JVM的最大permgen和最大堆大小,而不是它们当前可用的大小。 有没有办法做到这一点? 我熟悉Java Runtime对象中的方法,但不清楚它们真正提供了什么。 或者,是否有办法询问Eclipse为这两个分配了多少? 问题答案: 试试这个: 但是它们仅提供快照数据,而不提供累积值。