内存分配失败:8

370

今天起,我在2.3.3的Android平台上尝试在NetBeans中运行一个应用程序时,出现以下提示:

无法分配内存:8

此应用程序已请求Runtime以不寻常的方式终止它。 有关更多信息,请联系应用程序的支持团队。

模拟器也无法启动。

这是我第一次看到这种情况,谷歌上没有相关答案。我甚至尝试了NetBeans 6.9.1和7.0.1的两个版本,但仍然出现相同的错误。


3
为什么你使用 NetBeans 而不是 Eclipse,我很好奇。我用 NetBeans 做其他事情(主要是 PHP),但发现用 Eclipse 做 Android 开发更容易。你认为相较于 Eclipse,NetBeans 有哪些优点? - SBerg413
3
我以前从未使用过 Eclipse,但我不知道为什么我讨厌它。GUI 和 NetBeans 相比,它甚至更加复杂。但目前我正在下载它并尝试使用,如果问题消失了,我将只在其中制作 Android 应用程序。 - Denees
48
哇,那个评论里的逗号用的太多了。无论如何,请确保你的 AVD 使用适量的 RAM(即足够运行但不超出计算机承受范围)。这是在创建虚拟设备时设置的。 - Glendon Trullinger
2
仅供参考,我的电脑配置是Core i7处理器和16GB内存,我已经将AVD的内存升级到最大,但它们仍然很卡。:/ - Jack
1
我有一台运行在Intel Core i7处理器上的Windows 8 64位机器。为了使AVD(Nexus 7)正常运行,我不得不将RAM设置降至512MB。 - IgorGanapolsky
显示剩余4条评论
20个回答

373

我解决了问题,问题出在我指定的虚拟机内存大小上,原本是1024MB,现在改成了512MB,现在没问题了。不过我需要找到如何提高内存大小,512MB 不太够用,虚拟机有些卡顿。


20
我也遇到了同样的问题。我的电脑有8GB的RAM,其中6GB是空闲的,但安卓模拟器告诉我它无法分配1GB? - Strozykowski
5
我也有8GB的内存,但SDK告诉我只能使用512MB。 - Denees
5
还需要进行一次修正。有时将RAM设置为较低的值并不起作用。在这种情况下,尝试使用类似于“emulator-x86 -avd <your_avd_name>”的命令行启动模拟器。 - Mykhailo Gaidai
14
刚刚找到了解决方法:需要强制指定 AVD 分辨率为 800 x 1280。这样就可以按照我的要求启动 AVD 了。 - Nirav Shah
4
问题来自于任何在config.ini中将hw.ramSize的值增加1024的显示皮肤(GUI硬件列表中的“设备RAM大小”)。请确保选择一个具有较低值的“皮肤”,或者使用手动分辨率并从硬件列表中删除此行 - 当选择了皮肤时无法删除它。 - RedGlyph
显示剩余5条评论

61

29
“MB”在仿真器中无法识别,因此强制使用默认的256 MB值。请注意,您指定的数量并不是您将获得的数量! - RedGlyph
1
在应用程序下方,运行时,列出了大约240MB的总内存量,因此似乎会恢复到256MB。 - jishi
在“运行配置”窗口中添加参数“-memory 512”可以解决此链接中的问题。 - GatesReign

43

在我的情况下:

  • 使用内置的WXGA720模拟720p设备时,总是会出现这个错误
  • 手动设置AVD分辨率为720 x 1280,对我有用

希望能对你有所帮助~


类似的情况,7英寸WXGA800的默认设置失败了,而将分辨率设置为800 x 1280则有效。 - xandy

30

除此之外,您在这里和其他地方读到的所有内容都是纯猜测。唯一确定解决此问题的方法是投票支持这个错误报告

该问题与模拟器分辨率或OpenGL以及计算机内存量无关。我电脑内存有24GB,在大多数情况下使用hw.ramSize=1024时会出现错误8,而有时不需要做任何配置更改就可以正常工作。我希望你能明白:我根本没有更改模拟器配置,但有时它运行,有时它失败。

很可能与内存碎片有关。我建议暂时减少hw.ramSize的值作为解决措施。


2
请恕我直言,您的答案也纯粹是猜测而已;对我来说,设置虚拟内存为2048时,我没有运行任何模拟设备的问题(我没有试过更高的)。但是,只有在我通过远程桌面访问我的机器时,这些设备才能运行。因此,对我来说,这肯定是一个图形问题,而不是一个内存碎片化问题。我可以通过在本地和远程之间跳转我的会话来可靠地证明这一点。同一会话,同一AVD管理器实例,在一个情况下没有可怕的NVIDIA卡和他们可怕的驱动程序。(但那是另一个主题的牢骚)。 - s.co.tt
如果是“RAM碎片化”,我们可能可以使用那些愚蠢的免费“RAM碎片整理”程序进行测试,对吧? - User

29

可以使用512 Mb。对我来说,上述方法都不起作用。


将RAM大小从1024 Mib减少到768 Mib后,“无法分配内存:8”错误消失了。 - curd0
很多人都说要将大小固定为512 MB来解决问题。但这根本没有起作用。 - Stephen

17

看起来有成千上万种不同的解决方法……以上都不适用于我,但是有效的方法是通过命令行启动AVD,使用 emulator-arm.exe @AVD-NAME

如果只使用emulator.exe启动,则会出现与通过Eclipse启动时相同的错误消息。


你可能和我一样遇到了同样的问题。当你从一个地方启动模拟器时,DLL文件会被加载,但如果你从另一个地方启动,则不会加载。 - mjaggard

14
我发现这个问题的解决方案源于在正常模式下运行应用程序时Eclipse的内存分配。我只需在Eclipse的快捷方式属性下勾选“以管理员身份运行”框,现在它允许我为AVD分配更多内存。
希望对你有所帮助。

13

我通过更改设备屏幕大小来解决了这个问题。

我发现,如果您指定了1024 MB的RAM,则只需在hdpi中指定设备屏幕大小,如果是512 MB RAM,则应该是mdpi或其他。

因此,我们可以明确地说,RAM大小应根据屏幕大小指定。如果在保持设备屏幕大小为mdpi的情况下指定1024 RAM大小,则会导致上述错误,即“无法分配内存:8。此应用程序已请求Runtime以异常方式终止它。请联系应用程序的支持团队获取更多信息。”

或者

按照以下方式在AVD管理器中进行选项设置:

[2013-01-11 14:44:01 - SDK Manager] hw.sensors.orientation=yes

[2013-01-11 14:44:01 - SDK Manager] hw.camera.front=none

[2013-01-11 14:44:01 - SDK Manager] hw.gps=yes

[2013-01-11 14:44:01 - SDK Manager] skin.dynamic=no

[2013-01-11 14:44:01 - SDK Manager] hw.keyboard=no

[2013-01-11 14:44:01 - SDK Manager] vm.heapSize=32

[2013-01-11 14:44:01 - SDK Manager] hw.ramSize=343


这个可行:[2015-07-23 12:54:59 - SDK Manager] disk.dataPartition.size=500M [2015-07-23 12:54:59 - SDK Manager] hw.gpu.enabled=yes [2015-07-23 12:54:59 - SDK Manager] hw.audioInput=yes [2015-07-23 12:54:59 - SDK Manager] hw.sensors.orientation=yes [2015-07-23 12:54:59 - SDK Manager] hw.camera.front=none [2015-07-23 12:54:59 - SDK Manager] hw.gps=yes [2015-07-23 12:54:59 - SDK Manager] skin.dynamic=no [2015-07-23 12:54:59 - SDK Manager] hw.keyboard=yes [2015-07-23 12:54:59 - SDK Manager] vm.heapSize=32 [2015-07-23 12:54:59 - SDK Manager] hw.ramSize=512 - user914425

6
请查看官方问题33930。其中指出,在模拟器启动时,可能与OpenGL的启动有关。有人写道,只有当他们使用WXGA800皮肤时才会崩溃,并建议手动将分辨率设置为800x1280。
此外,还提供了ZIP文件,可以手动将android SDK降级到版本19和平台工具降级到版本11。这也可以帮助暂时修复此问题。

这可能与我的问题有关。当您从一个位置启动模拟器时,DLL文件会被加载,而如果您从另一个位置启动,则不会加载。 - mjaggard
肯定还有其他问题。首先将其设置为WXGA800,然后更改为手动分辨率1280x800仍会导致AVD崩溃。只有删除“hw.ramSize=1024”才能解决此问题(如果选择了WXGA,则无法这样做,您需要使用手动分辨率设置)。 - RedGlyph

6

我研究了本主题中提到的所有其他解决方案,没有发现有效的方法,所以我自己尝试了一下。Google版本的API出现了故障,我将其改回原版后问题得到了解决。

可能我还有其他问题,但希望这能对别人有所帮助……


奇怪。我已经设置为基本版本,但将其切换到Google API解决了问题。无论如何,这个想法加1! - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接