清楚解释OutOfMemoryError消息

时间:2016-04-21 12:46:05

标签: java android memory-management out-of-memory

我的Android应用会触发OutOfMemoryError,如下所示:

java.lang.OutOfMemoryError: Failed to allocate a 74649612 byte allocation with 1048576 free bytes and 63MB until OOM

任何人都可以解释每个值的含义(“字节分配”,“自由字节”和“直到OOM ”)?这条消息对我来说有点混乱。

详细信息:据我所知:在我们收到OutOfMemoryError异常之前有63MB,我们尝试分配74649612个字节但我们只有1048576个空闲字节。 (如果我们有“1048576可用字节”,我们怎么会有“63MB直到OOM”?我们有63MB + 1048576可用字节完全可用,我们正在尝试分配更多,比如74649612字节?)

2 个答案:

答案 0 :(得分:6)

"字节分配"指的是您尝试在单个块中分配的内存量。在这种情况下,即74649612字节。此分配请求大多数时间都会失败。

"免费字节"指的是在不扩展堆的情况下堆上有多少可用空间字节。在这种情况下,即1048576字节。但请注意,这些"空闲字节"可能不在一个连续的块中。通常,这个自由空间被分割成许多较小的块。

"直到OOM"表示您的堆可以扩展超出其当前大小。每个进程都有一个基于设备特征的堆限制。在您的情况下,堆可以从其当前大小扩展63MB,直到堆大小限制。但是,即便这样也不足以为您提供一个与您请求的大小相同的连续内存块。

答案 1 :(得分:0)

  

的OutOfMemoryError

是android中最常见的问题,尤其是在处理位图时。当由于内存空间不足而无法分配对象时,Java虚拟机(JVM)会抛出此错误,垃圾收集器也无法释放一些空间。

阅读所有5节课,然后重新编写代码。如果它仍然不起作用,我们将很高兴看到您对教程材料的错误。

这里有一些SOF中这类错误的可能答案

Android:BitmapFactory.decodeStream()内存不足,带有2MB可用堆的400KB文件

如何解决Android中的java.lang.OutOfMemoryError问题

Android:java.lang.OutOfMemoryError

java.lang.OutOfMemoryError

OutOfMemoryError的解决方案:位图大小超过VM预算

请你可以使用图像。这个图像大小非常大,这是个问题。您可以调整图像大小以调整大小