Windows XP上的Java最大内存我一直能够为运行在32位WindowsXP上的JavaSE分配1400兆字节(Java1.4、1.5和1.6)。java -Xmx1400m ...今天,我在一台使用Java1.5_16和1.6.0_07的新Windows XP计算机上尝试了相同的选项,得到了错误:Error occurred during initialization of VMCould not reserve enough space for object heapCould not create the Java virtual machine.通过试验和错误,看来1200兆字节是我在这台机器上所能分配到的最多的。你知道为什么一台机器只允许1400台而另一台只有1200台吗?编辑:这台机器有4GB的RAM和大约3.5GB的Windows可以识别。
3 回答

互换的青春
TA贡献1797条经验 获得超6个赞
对于堆,我们需要一个连续的内存区域,因为我们有一堆从堆开始就被(缩放)偏移量索引的侧数据结构。例如,我们使用一个“卡片标记数组”跟踪对象引用更新,该数组为每512字节堆有一个字节。当我们在堆中存储引用时,我们必须在卡片标记数组中标记相应的字节。我们正确地移动存储的目标地址,并使用它来索引卡片标记数组。在C+中寻址你无法用Java完成的算术游戏(必须:-)。
通常情况下,我们不会遇到不太大的连续区域(Windohs上最多可达1.5GB,Solaris上可高达3.8GB)。(YMMV.)在Windohs上,问题主要是在JVM启动之前加载了一些库,从而破坏了地址空间。使用/3GB开关不会重新建立库的基础,因此对我们来说,它们仍然是一个问题。
我们知道如何制作块堆,但是使用它们会有一些开销。与32位JVM中更大的堆相比,我们对更快的存储管理有更多的请求。如果您真的想要大堆,请切换到64位JVM。我们仍然需要连续内存,但在64位地址空间中获得内存要容易得多。

慕田峪7331174
TA贡献1828条经验 获得超13个赞
极大值
在32位Java上可能的堆大小: 1.8 GB
推荐
32位Java上的堆大小限制: 1.5GB
(或 1.8 GB
使用/3GB选项)
添加回答
举报
0/150
提交
取消