我已经在具有16Gb且12Gb可用的计算机上使用initial-heap-size="512m" max-heap-size="1024m"
定义了一个jnlp文件。由于本机库,JVM运行是32位JVM。我知道我必须有1Gb的连续内存可用于分配最大值。如果我将max-heap-size
减少到768,那么它会正常运行,有时我不需要减少它。
两个问题:
为什么机器在JVM启动之前最初检查max-heap-size?是否有正在执行的断言?
如果我有12Gb可用,为什么我无法从一开始就分配完整的1Gb - 假设有一个连续的1Gb块可用?
答案 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)