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

为什么在Windows和Solaris上都可以将-Xmx设置为大于计算机上物理和虚拟内存的值?

叶琦
2023-03-14
问题内容

在具有12GB RAM和33GB虚拟内存的64位Windows计算机上(每个任务管理器),我能够以不可能的-
Xmx设置3.5TB运行Java(1.6.0_03-b05),但在35TB时失败。它工作时和失败时的逻辑是什么?35TB的错误似乎暗示它正在尝试在启动时保留空间。为什么对-
Xmx(而不是-Xms)这样做?

C:\ temp> java -Xmx3500g ostest  
os.arch = amd64  
13781729280字节RAM

C:\ temp> java -Xmx35000g ostest  
VM初始化期间发生错误  
无法为对象堆保留足够的空间  
无法创建Java虚拟机。

在Solaris(4GB RAM,Java 1.5.0_16)上,我几乎放弃了1 PB的设置-Xmx设置的上限。我不了解何时在-Xmx设置上出错的逻辑。

devsun1.mgo:/ export / home / mgo> java -d64 -Xmx1000000g ostest
os.arch = sparcv9
4294967296字节RAM

问题答案:

至少对于Windows的Sun 64位VM 1.6.0_17,ObjectStartArray ::
initialize将在VM启动时为每512字节堆分配1字节。启动具有35TB堆的VM将导致VM立即分配70GB,因此在您的系统上将失败。

Sun的32位VM(因此我假设是64位VM)在计算最大堆时未考虑可用的物理内存,而仅受Windows和Linux上2GB可寻址内存或Solaris上4GB或在启动时可能无法为管理区域分配足够的内存。

如果考虑一下,对照可用的物理内存检查最大堆值的合理性就没有多大意义。X GB的物理内存并不意味着在需要时VM可以使用X
GB,它也可以被其他进程使用,因此VM需要一种方法来应对这样的情况:需要更多的堆而不是从操作系统。如果VM没有损坏,则无法从OS分配内存时,将引发OutOfMemoryErrors,就像已达到最大堆大小一样。



 类似资料:
  • 我们都知道,直接从内存读写数据要比从硬盘读写数据快得多,因此更希望所有数据的读取和写入都在内存中完成,然而内存是有限的,这样就引出了物理内存与虚拟内存的概念。 物理内存就是系统硬件提供的内存大小,是真正的内存。相对于物理内存,在 Linux 下还有一个虚拟内存的概念,虚拟内存是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存。用作虚拟内存的磁盘空间被称为 交换空间(又称  

  • 在与 GDT 相关的章节中,我们知道分段物理内存地址使用的是段选择和计算偏移(Linux在X86上的虚拟内存管理) 在本章中,我们将实现内存的分页功能,其原理是将分段的线性地址转换成物理地址(分页表存储了虚拟(线性)地址到物理地址间的映射)。 为什么我们需要分页管理内存? 内存分页将允许我们的内核: 为避免歧义,保留部分原文 use the hard-drive as a memory and n

  • JVM选项: 正如预期的那样,JVM将为JVM堆分配将近20MB的内存。 但请参阅以下 GC 详细信息: PSYoungGen总计9216K,已用4612k[0x 00000000 ff 6000000,0x 0000000010000000100000000]< br > Eden空间8192K,56%已用[0x 000000000 ff 600000,0x 0000000 FFA 812d 8

  • 我尝试使用XAMPP为一些本地站点设置虚拟主机。 我执行了以下步骤: 在“C:/xampp/apache/conf/extra/httpd vhosts.conf”中,我添加了: 和 如果我遵守: 一切正常:我看到我的目录和文件夹“htdocs”中的项目。 但是如果我遵守: 我希望在“.htdocs/fw/public”中看到我的“index.php”文件的结果。但我得到: 文件“C:/xampp

  • 本文向大家介绍请问虚拟内存和物理内存怎么对应相关面试题,主要包含被问及请问虚拟内存和物理内存怎么对应时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 1、概念: 物理地址(physical address) 用于内存芯片级的单元寻址,与处理器和CPU连接的地址总线相对应。   虽然可以直接把物理地址理解成插在机器上那根内存本身,把内存看成一个从0字节一直到最大空量逐字节的编号的大数组,然后把

  • 问题内容: 因此,我有一个分配256 MB内存的程序,在用户按下ENTER键后,它将释放内存并终止。 我多次运行了该程序并将它们分别作为背景,直到不再有足够的内存可以分配。但是,那永远不会发生。我运行了linux 命令,即使在多次运行该程序之后,可用内存也不会减少多达256 MB。 但是,另一方面,如果我使用而不是则存在巨大差异: 现在,如果我运行该程序并使其后台运行,然后重复执行,则每次运行它时