我有一个 Java SE 桌面应用程序,它使用大量内存(需要 1.1 GB)。所有目标机器(Win 7、Win Vista)都有足够的物理内存(至少 4GB,大多数有更多)。还有足够的空闲内存。
现在,当机器有一些正常运行时间并且启动和终止许多程序时,内存会变得碎片化(这是我假设的)。这会导致JVM启动时出现以下错误:
JVM creation failed
Error occurred during initialization of VM
Could not reserve enough space for object heap
在这种情况下,即使关闭所有正在运行的程序也无济于事(尽管任务管理器和其他工具报告了足够的可用内存)。唯一有帮助的是重新启动机器并启动 Java 应用程序作为第一个启动的程序之一。据我调查,Oracle VM 需要一块连续的内存。
当这个数量可用但可能碎片化时,是否有任何其他方法可以为我的 java 应用程序分配大约 1.1 GB 的堆?
我使用以下参数启动我的 JVM:
-J-client -J-Xss2m -J-Xms512m -J-Xmx1100m -J-XX:PermSize=64m -J-Dsun.zip.disableMemoryMapping=true