java - Java内存管理 Java web启动"Error: could not create the java virtual machine"

  显示原文与译文双语对照的内容
0 0

我已经定义了一个jnlp文件 initial-heap-size="512m" max-heap-size="1024m" 在具有 12Gb 可用的16Gb的机器上。 运行的JVM是一个 32位 JVM,因为本机库。 我明白,我必须有 1Gb 个连续内存才能分配。 如果我将 max-heap-size 减少到 768,那么它正常运行,有时我不需要减少它。

两个问题:

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

  2. 如果有可以用的12Gb 个连续的1Gb 块,为什么我不能从is分配完整 1Gb?

时间: 原作者:

0 0

如果你不能使用 64位 jvm 。

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

http://stackoverflow.com/questions/2288728/drawbacks-of-using-largeaddressaware-for-32-bit-windows-executables

如果在Linux上,看看你的系统硬或者软限制。 这可能会限制你的进程的最大大小。 另外,你可能有过程控制组。

对于 ulimit,在 linux/unix上尝试

ulimit -a

具体看一下 ulimit -m或者-v设置。 如果这些是无限的,你可能会遇到另一种控制机制。

原作者:
0 0

部分有价值的猜测:

如果有可以用的12Gb 个连续的1Gb 块,为什么我不能从is分配完整 1Gb?

你写了JVM运行是一个 32位 JVM,因为本。 但是如果你不分配大量内存,那么你可能仍然会遇到 fragment的虚拟地址空间( 你只能在没有LARGESPACEAWARE的情况下) 。 你可能需要研究本地库的基本地址和不断变化的属性。 有一个叫做 VMMap插件的免费工具,这对研究这些问题非常有用。

原作者:
...