我的 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 个字节?)

最佳答案

“字节分配”是指您尝试在单个块中分配多少内存。在这种情况下,即 74649612 字节。大多数情况下,此分配请求将失败。

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

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

关于java - OutOfMemoryError 消息的清晰解释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36770084/

10-12 03:11