java - OutOfMemoryError 消息的清晰解释

标签 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

谁能解释一下每个值的含义(“byte allocation”、“free bytes”和“until OOM”)?这条消息让我有点困惑。

详细信息:据我了解:在出现 OutOfMemoryError 异常之前还有 63MB,我们尝试分配 74649612 字节,但只有 1048576 字节可用。 (如果我们有“1048576 个空闲字节”,为什么我们有“63MB 直到 OOM”?我们是否有 63MB + 1048576 个空闲字节完全可用,我们正在尝试分配更多,比如 74649612 字节?)

最佳答案

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

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

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

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

相关文章:

java - spring mvc中如何使用静态资源?

c++ - 处理失败的内存分配

java - 自定义窗口标题和 ActionBar

android - 在android中,打开键盘时仅推送 View 的某些部分而不是整个 View

android - 使自定义 Android SurfaceView 透明

c++ - SIMD 和动态内存分配

c++ - 内存堆问题C++,动态分配多维数组

java - 如何使用 Java 从 url 流式传输音乐 - Android

java - 如何拯救bukkit中击杀数最多的玩家

java - BufferReader 卡在 readline() 中