每次尝试运行程序时,我都会反复得到以下异常。

VM初始化期间发生错误
无法为对象堆保留足够的空间
无法创建Java虚拟机。

我试图增加虚拟内存(页面大小)和RAM大小,但无济于事。
如何消除此错误?

评论

Java可能重复的拒绝启动-无法为对象堆保留足够的空间

在我的虚拟机上使用jdk / jre 1.6时,在尝试更改注释中给出的配置值时,我也遇到此错误,但这无济于事,将其更新为jdk 1.7后,错误消失了,并应用了较大的Xmx参数。自Java 1.6以来,堆使用似乎发生了许多变化。

#1 楼

使用-XX:MaxHeapSize=512m(或需要的任何大数)(或简称-Xmx512m)运行JVM

评论


或更短的-mx256m或-mx512m;)

– Peter Lawrey
2010-12-09 19:55



-mx与-Xmx和-XX:MaxHeapSize相同吗?

–Erty Seidohl
2012年8月20日18:57

谢谢..事实证明,数字太大也可能是一个问题,并且可能导致相同的错误!

–Dinesh Rajan
2014年9月3日23:00



有人找到了一种实际上可以100%起作用的解决方案吗?此解决方案暂时解决了问题,但是突然又回来了。我有16GB的ram,我已经厌倦了这个问题。过去一切都更好:[

–尼尔佐
2014年10月1日13:06

在使用x86或x64 Java的Windows 8上对我不起作用。

– AndrewSmiley
15年7月27日在13:13

#2 楼

这也可能是由于在32位HotSpot虚拟机上设置的内容过大而引起的,例如:

-Xms1536m -Xmx1536m


可能/可行的地方:

-Xms1336m -Xmx1336m


评论


我忘了提到在32位命令shell中启动时必须发生此问题。 64位命令外壳程序可能不会出现此问题。

– djangofan
2012年9月10日下午3:37

对我而言,它使用默认值和太大的值失败,因此请确保尝试多个值。感谢你的回答!

–Trax
19年8月8日在16:17

#3 楼

以下是解决方法:



转到“开始”->“控制面板”->“系统”->“高级(选项卡)”->“环境变量”->“系统”

变量->新增:变量名称:_JAVA_OPTIONS
-Xmx512M
Path
%PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;


更改转到您合适的路径。

评论


与这个答案非常相似,我会说...

– That1Guy
16年5月20日在15:01

好一个除上述内容外,也请参考此内容。 stackoverflow.com/a/9350506/967638

– mar菜
16 Dec 5'在13:02

#4 楼

我在使用javac时遇到了这个问题,它似乎没有在命令行选项中出现,

-bash-3.2$ javac -Xmx256M HelloWorldApp.java 
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.


所以这里的解决方案是_JAVA_OPTIONS

-bash-3.2$ export _JAVA_OPTIONS="-Xmx256M"
-bash-3.2$ javac HelloWorldApp.java 
Picked up _JAVA_OPTIONS: -Xmx256M


并且可以很好地编译。

这在具有大量RAM但内存限制较低的计算机上发生。 Java之所以决定分配一个大堆,是因为它在机器中检测到了ram,但是由于ulimits的原因,它不允许分配它。

评论


+1指出_JAVA_OPTIONS —在我的情况下,java是从我没有写访问权的shell脚本中的某个深处调用的,因此此选项是可取的。

– Gerrit
15年5月15日在9:50

同样在这里。我使用的是大学计算机,所以我不是管理员(无法更改环境变量),并且命令行选项根本无效。非常感谢!

–金佰利
17年2月11日在3:23

#5 楼

32位Java需要内存中连续的可用空间才能运行。如果指定较大的堆大小,即使可用的可用空间比必要的要多得多,内存中也可能没有太多的连续可用空间。

安装Java的64位版本有助于解决这些问题。在这种情况下,连续内存要求仅适用于32位Java。

评论


我认为这是最好的答案,以防您在使用-Xmx [bignumber] m选项后仍然收到错误消息。帮助我正确运行了Apache jMeter。

– RuudvK
18年4月10日在13:18

我创建了一个全新的项目,除了自动生成的主要活动外没有其他代码,并且产生了此错误

–相信
18年9月11日0:47

我第二个@RuudvK。安装64位可以让我增加最大内存,同时清除内存分配错误。这应该是公认的答案。

– J Weezy
19年1月2日在23:26

#6 楼

与-Xmx512M结合使用-d64以确保您正在运行64位VM。我确定在64位计算机上运行的是64位虚拟机,但没有。安装64位Java之后,-d64选项有效,并且-Xmx允许更大的内存大小。

java -d64 -Xmx512M mypackage.Test


评论


这个答案应该在顶部。花了两个月的时间解决这个问题,只是意识到安装64位Java可以解决该问题(在我的情况下,不需要-d64选项)

–尼尔佐
2014-10-27 14:16

拾取了_JAVA_OPTIONS:-d64 -Xmx1024M无法识别的选项:-d64无法启动JVM。最大堆大小(-Xmx)可能太大,或者防病毒或防火墙工具可能阻止执行。

–亚历山大
18年6月15日在9:30

#7 楼

我遇到了相同的错误,并通过在run.conf.bat

中进行配置来解决此问题,方法是在Jboss5x中使用配置run.conf.bat来运行JVM。在您传递语句时不可用,请在run.conf.bat中进行更改。

set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m"


#8 楼

我有类似的问题。我已经在64位计算机上安装了32位Java版本。

通过卸载该版本并安装Java的64位版本。我能够解决此问题。

#9 楼

我知道这里已经有很多答案,但是没有一个对我有帮助。最后,我打开文件/etc/elasticsearch/jvm.options并进行了更改:

-Xms2G
-Xmx2G




-Xms256M
-Xmx256M


我。希望这对这里的其他人有所帮助。

#10 楼

假设您的课程在Test软件包中称为mypackage。像这样运行您的代码:

java -Xmx1024m mypackage.Test


这将为您的代码保留1024 MB的堆空间。如果需要512 MB,则可以使用:

java -Xmx512m mypackage.Test


1024m512m等中使用小m

#11 楼

有时,此错误表明服务器上的物理内存和交换空间实际上已被充分利用!

我最近在运行具有48 GB RAM的RedHat Enterprise Linux 5.7的服务器上看到此问题。我发现即使只是运行

java -version


也会引起相同的错误,这表明该问题并非我的应用程序所特有。

运行

cat /proc/meminfo


报告说MemFree和SwapFree的值分别远低于MemTotal和SwapTotal值的1%:

MemTotal:     49300620 kB
MemFree:        146376 kB
...
SwapTotal:     4192956 kB
SwapFree:         1364 kB


在计算机上停止其他一些正在运行的应用程序会使空闲内存的数字有所提高:

MemTotal:     49300620 kB
MemFree:       2908664 kB
...
SwapTotal:     4192956 kB
SwapFree:      1016052 kB


此时,可以启动一个新的Java实例,而且我能够运行我的应用程序。

(显然,对我来说,这只是一个临时解决方案;我仍然有一项出色的任务,需要更彻底地检查该计算机上运行的进程看看是否可以采取一些措施来降低名义上的内存利用率,而不必诉诸于停止应用程序。)

评论


同样,这里的java -version失败了,即使top仍然显示了一些免费的:| (也表示在VM初始化期间发生错误,有时无法为卡标记阵列保留足够的空间)。修复似乎是在运行,寻找哪些进程使用了​​最多的RAM(VIRT列),将其杀死[postgres,对我而言,appdynamics]:|

–rogerdpack
16-10-24在22:37



这可能是由于内存碎片造成的吗?上面的答复提到了连续的可用空间。

–里克·莫里茨(Rick Moritz)
6月3日12:04

#12 楼

错误:

对于该错误,“在vm初始化期间发生的错误无法为对象堆jboss保留足够的空间”

根本原因:


如下所述,对我们的JVM的内存分配不正确/不足。
例如jboss-eap-6.2 \ bin \ standalone.conf中的JAVA_OPTS =“-Xms1303m -Xmx1303m -XX:MaxPermSize = 256m”或jboss-eap-6.2 \ bin \中的“ JAVA_OPTS = -Xms1G -Xmx1G -XX:MaxPermSize = 256M” standalone.conf.bat就是JVM内存分配池参数。

解决方案:


增加堆大小。要增加堆大小,请
goto-> jboss-eap-6.2 \ bin \ standalone.conf.bat或jboss-eap-6.2 \ bin \ standalone.conf
JAVA_OPTS =“-Xms256m -Xmx512m -XX:MaxPermSize = 256m“,其中-Xms是最小堆大小,-Xmx是最大堆大小。
通常不建议最小和最大大小相同。
如果正在运行, eclipse中的应用程序,
双击服务器上的
选择“打开启动配置”,您将被重定向到“编辑启动配置属性”窗口。
在此窗口中,转到选项卡'(x )= Arguments'。
在VM Arguments中,如下所述定义堆大小
“ -Dprogram.name = JBossTools:JBoss EAP 6.1+运行时服务器” -server -Xms256m -Xmx512m -XX:MaxPermSize = 256m -Dorg.jboss.resolver.warning = true


评论


Oracle命令行参考中的引号:“为获得最佳性能,请将-Xms设置为与最大堆大小相同的大小,例如:java -Xgcprio:throughput -Xmx:64m -Xms:64m myApp”

–user1438038
17 Mar 3 '17 at 10:33



#13 楼

打开android文件夹中的gradle.properties文件。

替换此行:

org.gradle.jvmargs=-Xmx1536M


with:

org.gradle.jvmargs=-Xmx512m


说明:
Gradle文档中的最大限制:

如果请求的构建环境未指定最大堆大小,则守护程序将使用多达512MB的堆。

#14 楼

我最近遇到了这个问题。我有3个以1024m或1280m堆大小开头的Java应用程序。
Java正在查看交换中的可用空间,如果没有足够的可用内存,则jvm将退出。

解决此问题后,我不得不结束分配了大量虚拟内存的几个程序。

我在具有64位jvm的x86-64 linux上运行。

#15 楼

我的内存设置数量合适,但对我来说,它使用的是64位intellij和32位jvm。切换到64位VM后,错误消失了。

#16 楼

假设您有足够的可用内存,并且正确设置了JVM参数,则可能存在内存碎片问题。在Windows XP上检查Java最大内存。

#17 楼

如果您正在运行32位JVM,则将堆大小更改为较小可能会有所帮助。您可以通过将args直接传递给Java或通过以下环境变量来实现此目的,

java -Xms128M -Xmx512M
JAVA_OPTS="-Xms128M -Xmx512M"


对于64位JVM,像-Xms512M -Xmx1536M这样的较大堆大小应该可以工作。
针对Java7运行java -versionjava -d32java--d64来检查您正在运行的版本。

#18 楼

无论如何,这是解决方法:
转到“开始”->“控制面板”->“系统”->“高级(选项卡)”->“环境变量”->“系统变量”->“新”:
变量名称:_JAVA_OPTIONS < br变量值:-Xmx512M

OR

如下所示更改ant调用。

   <exec
        **<arg value="-J-Xmx512m" />**
    </exec>


对我有用。

#19 楼

VM初始化期间发生错误
无法为1572864KB对象堆保留足够的空间

我将settings.grade文件中的内存值更改为<1 /> 1536到512,并且对
有所帮助

#20 楼

转到“开始”->“控制面板”->“系统”->“高级(选项卡)”->“环境变量”->“系统变量”->“新建”:

Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M


评论


全局设置此项会限制您可以赋予IntelliJ的堆大小。

–user3056052
19 Mar 10 '19在8:04

#21 楼

如果您正在运行Java程序:
-使用适用于Linux的正确命令在终端中运行程序,则应为'java -jar myprogram.jar'并添加-Xms256m -Xmx512m,例如:'java- jar myprogram.jar Xms256m -Xmx512m'

如果您正在运行.sh脚本(Linux,Mac?)或.bat脚本(Windows),请打开该脚本并查找Java选项(如果它们已存在并增加内存。

如果以上所有方法均无效,请检查您的进程(在Windows上为ctrl + alt + delete)(在linux / mac上为ps aux)并杀死那些使用内存分配,对于您的操作系统不是必需的! =>尝试重新运行您的程序。

#22 楼

在CASSANDRA_HOME / bin / cassandra.bat中,您会找到以下配置

REM JVM Opts we'll use in legacy run or installation
set JAVA_OPTS=-ea^
 -javaagent:"%CASSANDRA_HOME%\lib\jamm-0.3.0.jar"^
 -Xms**2G**^
 -Xmx**2G**^


您可以将2G降低到较小的数量,例如1G或更小,它应该可以工作。

如果您在Unix机器上运行,则要相应地更改.sh文件。

#23 楼

当我使用%temp%删除临时文件并重新启动eclipse时,我遇到了相同的错误,并且已解决。

#24 楼

有时它与

 $ sysctl vm.overcommit_memory
vm.overcommit_memory = 2
 


有关,如果将其设置为:

$ sysctl vm.overcommit_memory=0


它应该工作。

#25 楼

-Xmx2G替换为-Xms512M或cassandra bin目录中cassandra.bat文件中的任何更大的内存大小。

#26 楼

无需更改任何内容,只需更改如下所示的POM文件

<configuration>
    <maxmemory>1024M</maxmemory>
</configuration>


评论


谁对POM文件说了什么?

–邱汉ley
2014年11月18日,0:56