Java内存管理 - java web start"错误:无法创建java虚拟机"

时间:2014-10-28 15:01:41

标签: java jvm

我已经在具有16Gb且12Gb可用的计算机上使用initial-heap-size="512m" max-heap-size="1024m"定义了一个jnlp文件。由于本机库,JVM运行是32位JVM。我知道我必须有1Gb的连续内存可用于分配最大值。如果我将max-heap-size减少到768,那么它会正常运行,有时我不需要减少它。

两个问题:

  1. 为什么机器在JVM启动之前最初检查max-heap-size?是否有正在执行的断言?

  2. 如果我有12Gb可用,为什么我无法从一开始就分配完整的1Gb - 假设有一个连续的1Gb块可用?

2 个答案:

答案 0 :(得分:0)

如果你不能使用64位JVM ......

如果在Windows上使用32位JVM,则需要研究“大地址识别”(JVM编译/链接/ LARGEADDRESSAWARE选项)。它允许您使用32位更大的内存占用。您可以在特定可执行文件上设置该位。

Drawbacks of using /LARGEADDRESSAWARE for 32 bit Windows executables?

如果在Linux上,请查看系统硬限制或软限制。这可能会限制您的流程的最大大小。此外,您可能拥有过程控制组。

对于ulimits,在Linux / UNIX上尝试

ulimit -a

具体看一下ulimit -m或-v设置。如果这些是无限制的,您可能正在经历另一种控制机制。

答案 1 :(得分:0)

部分受过教育的猜测:

  

如果我有12Gb可用,为什么我无法从一开始就分配完整的1Gb - 假设有一个连续的1Gb块可用?

您写道,由于本机库,JVM运行是32位JVM。请注意,那些本机库是您的过程的一部分,即使它们没有分配大量内存,它们仍然可以分割2 GB的虚拟地址空间(您只限于此,没有LARGESPACEAWARE)这样你就不会有一个连续的1 GB块。您可能想要学习本地图书馆'基地址和rebasing。有一个名为VMMap的免费工具,非常适合研究这些问题。