当我运行时,每次尝试运行程序时,我都会反复出现以下异常.
VM初始化期间发生错误
无法为对象堆保留足够的空间
无法创建Java虚拟机.
我试图增加我的虚拟内存(页面大小)和RAM大小,但无济于事.任何人都可以告诉我如何消除此错误?
是否可以在Eclipse调试器中执行反向执行?我正在处理的当前项目需要至少5秒钟才能完成任何操作之前从文件中读取和初始化数据.如果我在调试器中超越,我必须终止程序并重新启动,这需要相当长的时间.
问题不在于32位操作系统上的最大堆大小,因为32位操作系统的最大可寻址内存大小为4GB,并且JVM的最大堆大小取决于可以保留多少连续空闲内存.
我更感兴趣的是知道在64位操作系统中运行的32位JVM的最大(理论上和实际可实现的)堆大小.基本上,我正在寻找与SO相关问题中的数字类似的答案.
至于为什么使用32位JVM而不是64位JVM,原因不是技术性的,而是行政/官僚性的 - 在生产环境中安装64位JVM可能为时已晚.
首先,我有一个8GB的内存盒,所以我怀疑总内存是什么问题.此应用程序在6GB或更低的机器上运行良好.
我试图在Eclipse的Run Configurations中的"VM Arguments"下使用-Xmx3G保留3GB的空间.
每次我尝试保留超过1500mb时,我都会收到此错误:"VM初始化期间出错; 无法使用-Xmx3G为对象堆保留足够的空间
这里发生了什么?
我们有大约20个Linux刀片池.有些正在运行Suse,有些正在运行Redhat.ALL共享NAS空间,其中包含以下3个文件夹:
我们所有的机器都有2个处理器(超线程),4GB物理内存和4GB交换空间.我们将每台机器在给定时间可处理的"作业"数量限制为6(此数字可能需要更改,但这不会进入当前问题,因此请暂时忽略它).
我们的一些工作设置最大堆大小为512mb,其他一些保留最大堆大小为2048mb.同样,我们意识到如果在堆大小设置为2048的同一台机器上启动了6个作业,我们可以查看可用内存,但据我们所知,这还没有发生.
有一段时间,作业将立即失败,并显示以下消息:
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
Run Code Online (Sandbox Code Playgroud)
我们曾经在同一台机器上同时运行太多工作.这个问题很少发生(可能每月一次),我们只是重新启动它,一切都会好的.
这个问题最近变得更糟.我们所有请求最大堆大小为2048m的作业几乎每次都会立即失败,需要在完成之前重新启动几次.
我们已经去了各个机器,并尝试使用相同的结果手动执行它们.
事实证明,问题只存在于我们的SuSE盒子中.它更频繁发生的原因是因为我们一直在添加更多的机器,而新的机器是SuSE.
SuSE盒子上的'cat/proc/version'给我们:
Linux version 2.6.5-7.244-bigsmp (geeko@buildhost) (gcc version 3.3.3 (SuSE Linux)) #1 SMP Mon Dec 12 18:32:25 UTC 2005
Run Code Online (Sandbox Code Playgroud)
RedHat盒子上的'cat/proc/version'给我们:
Linux version 2.4.21-32.0.1.ELsmp (bhcompile@bugs.build.redhat.com) (gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-52)) #1 SMP …Run Code Online (Sandbox Code Playgroud) 有关此问题的更新 - 请参阅下文.
我经历了(可重现的,至少对我而言)jvm 崩溃(不是OutOfMemoryError)(崩溃的应用程序是eclipse 3.6.2).但是,查看崩溃日志让我想知道:
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 65544 bytes for Chunk::new
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap …Run Code Online (Sandbox Code Playgroud) 我在32位Windows和4 GB RAM上运行Java7,但是:
java -Xmx4G -Xms4G -jar Minecraft.jar
java -Xmx3G -Xms3G -jar Minecraft.jar
java -Xmx2G -Xms2G -jar Minecraft.jar
Run Code Online (Sandbox Code Playgroud)
......仍然无效.错误:
初始化VM时 出错无法
为对象堆保留足够的空间
错误:无法创建Java虚拟机.
错误:发生了致命异常.程序将会退出.
java -Xmx1G -Xms1G -jar Minecraft.jar工作中.为什么?
这是我的情况:我手头有一项需要大量记忆的任务.我没有足够的ram,无论我尝试了什么(Jrockit和/ 3gb交换机等),我都不能给JVM足够的ram并且操作以异常终止,告诉我需要更多的堆空间.
有什么方法可以强制JVM使用操作系统的交换机制,以便它不会耗尽内存?这是Windows xp 32位
这需要很长时间,但我不在乎,我只需要完成这项操作.
我的选项用完了,而且我无法控制任何变量.
这是一个必需的编辑,因为我几乎每个人都有相同的响应:)这不是我的代码.有人编写了一个将xml文件读入存储库的工具.该工具使用EMF,并立即加载整个模型.我所能做的就是为它提供XML文件.如果本机代码在Windows或Linux等下运行,操作系统会使用虚拟内存/交换空间为其提供内存,而应用程序并不知道它.我想知道是否可以对JVM做同样的事情.在Windows 32位下,-Xmx可以达到一定数量,但这还不够.出门购买新硬件暂时不适合我.所以我想知道是否有可能使JVM像本机进程一样工作.慢,但仍在工作.显然这是不可能的,我运气不好.我只需要知道我是否真的没有选择权.
我在一家小型Android游戏开发公司工作,目前我遇到了一个问题.我正在使用Eclipse和Android SDK运行一个非常标准的Windows 7 x64机器.
我正在阅读我的程序的LogCat输出,想知道为什么我的游戏甚至都不会出现.我很快看到所有的堆都在增长,并且认为我可能有太多的纹理/太大的纹理等等.我确定了纹理加载的问题,然后我开始使用DDMS并注意到我的堆不会超过19MB.我剪了几个纹理,试图再次构建和运行.令我震惊的是,堆不会一直超过6.6MB.有没有人有什么建议?
tl; dr:我的堆增长到19MB然后失败了,所以我拿出了内存更昂贵的纹理,使其在堆中保持在19MB以下,现在我的堆不会超过6.6MB.
编辑:当取出更大的纹理时logcat输出:
08-19 19:19:53.744: DEBUG/dalvikvm(4699): GC_FOR_MALLOC freed 91 objects / 514016 bytes in 49ms
08-19 19:19:54.184: DEBUG/dalvikvm(4699): GC_FOR_MALLOC freed 104 objects / 494088 bytes in 48ms
08-19 19:19:54.404: WARN/ActivityManager(59): Launch timeout has expired, giving up wake lock!
08-19 19:19:54.764: DEBUG/dalvikvm(4699): GC_FOR_MALLOC freed 85 objects / 384664 bytes in 49ms
08-19 19:19:54.935: WARN/ActivityManager(59): Activity idle timeout for HistoryRecord{4612eec8 com.wickeyware.zombiearcher.android/.AndroidGame}
08-19 19:19:55.234: DEBUG/dalvikvm(4699): GC_FOR_MALLOC freed 104 objects / 504648 bytes in 47ms
08-19 19:19:55.875: DEBUG/dalvikvm(4699): GC_FOR_MALLOC … 因此,就像许多人用Eclipse开始Android开发一样,即使使用快速机器,我也注意到模拟器的运行速度令人沮丧.
我搜索SO以获得使其运行更快的任何提示,并且我遇到了这个问题,其最佳答案表明了一些事情,包括使AVD拥有更多RAM.他们建议1024MB:

听起来不错.但是当我尝试启动它时,我得到了这个:
Failed to allocate memory: 8
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Run Code Online (Sandbox Code Playgroud)
如果我将它设置为512MB(从默认的256MB开始),则启动正常.
但是,为什么在具有12GB物理RAM的Windows 7 x64机器上我不能为AVD分配1024MB?这是Eclipse的限制吗?模拟器限制?Java限制?我认为那个人在另一个问题上得到了它的工作,但我还没弄清楚我在其他地方看到的大多数反应如何说"是的,将它拨到512MB",这不是我正在寻找的答案.