目前我们遇到了一个问题,我们的Java应用程序可以使用JRE6顺利运行,但是对于JRE7,它有时会报告“无法创建Java虚拟机”并且无法启动程序。我们在启动命令行中有“-Xmx1024m”选项。
在谷歌搜索后,人们建议检查PC中可以请求的最大堆大小。然后我尝试了下面的那些。
表示JRE6,
C:\Users\joey>java -Xmx1214m -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) Client VM (build 20.45-b01, mixed mode)
C:\Users\joey>java -Xmx1215m -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
表示JRE7,
D:\Program Files\Java\jre7\bin>java.exe -Xmx930m -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) Client VM (build 24.51-b03, mixed mode)
D:\Program Files\Java\jre7\bin>java.exe -Xmx931m -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
当我关闭PC中的大多数进程并将内存释放到2.5 GB时,对于JRE7,它将以1094m成功,如下所示。
D:\Program Files\Java\jre7\bin>java.exe -Xmx1094m -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) Client VM (build 24.51-b03, mixed mode)
D:\Program Files\Java\jre7\bin>java.exe -Xmx1095m -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
似乎JVM可以请求的最大堆大小与系统可用内存大小有关,有人知道确切的关系吗?
在创建JVM时是否有某种方法可以启用JRE的跟踪日志?
谢谢!
此致 乔伊
答案 0 :(得分:0)
我在各种Windows操作系统风格(Win7,Win2008R2)上遇到同样的问题,同时有足够的空闲RAM(3-5G),从jre6_20切换到jre7_51(两个32位虚拟机)
在java 6上使用vm args -Xmx1300m和-XX:MaxPermSize = 256m,VM可以启动。但是,使用java7我必须降低启动最大内存(xmx为100m或permgen为100m)才能启动VM。
有趣的部分是:如果我重新启动我的盒子,jvm 7以原始的vm args(-Xmx1300m和-XX:MaxPermSize = 256m)开始,所以我怀疑根本原因可能是具有JVM组合的操作系统。
我知道在Windows操作系统上 - 32 bit VMs期望有一大块内存,但不能使用最大进程内存大小,范围从1.4G到1.6G(因为有额外的限制)
任何疑难解答指针? Oracle没有在java7发行说明中提供任何信息(或者我无法发现这些信息)
答案 1 :(得分:0)
我有类似的问题Windows 7 64位,没有JAVA_HOME设置也没有PATH 这失败了 " C:\ Program Files(x86)\ Java \ jdk1.7.0_51 \ bin \ java.exe" -Xms32m -Xmx1024m -XX:MaxPermSize = 256m -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
这很有效 " C:\ Program Files(x86)\ Java \ jdk1.7.0_51 \ bin \ java.exe" -Xms32m -Xmx512m -XX:MaxPermSize = 256m -version
这也有效(我可以重新编译或不重新编译,但不会有所作为 " C:\ Program Files(x86)\ Java \ jdk1.6.0_45 \ bin \ java.exe" -Xms32m -Xmx1024m -XX:MaxPermSize = 256m -version
我试过关闭窗口DEP,没有什么区别 http://windows.microsoft.com/en-us/windows-vista/data-execution-prevention-frequently-asked-questions
我对虚拟内存设置进行了调整,从允许Windows更改为管理 http://windows.microsoft.com/en-us/windows/change-virtual-memory-size#1TC=windows-7
我在Windows中增加了虚拟内存,它允许它工作,有时......(使用xmx1024)
没有其他东西消耗大量资源(内存等,我确实在本地运行oracle数据库,但关闭了它)
" C:\ Program Files(x86)\ Java \ jdk1.7.0_51 \ bin \ java.exe" -Xms32m -Xmx1024m -XX:MaxPermSize = 256m -version VM初始化期间发生错误 无法为对象堆保留足够的空间 错误:无法创建Java虚拟机。 错误:发生了致命异常。程序将退出。
这很有效 " C:\ Program Files(x86)\ Java \ jdk1.7.0_51 \ bin \ java.exe" -Xms32m -Xmx900m -XX:MaxPermSize = 256m -version
这失败了 U:>" C:\ Program Files(x86)\ Java \ jdk1.7.0_51 \ bin \ java.exe" -Xms32m -Xmx2024m -XX :MaxPermSize = 256m -version VM初始化期间发生错误 无法为对象堆保留足够的空间 错误:无法创建Java虚拟机。 错误:发生了致命异常。程序将退出。
新版本,即使启用Windows Managage虚拟内存和DEP也可以使用 " C:\ Program Files(x86)\ Java \ jdk1.7.0_65 \ bin \ java.exe" -Xms32m -Xmx1024m -XX:MaxPermSize = 256m -version