【问题标题】:Clear explanation of the OutOfMemoryError messageOutOfMemoryError 消息的清晰解释
【发布时间】:2016-08-14 16:23:56
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      OutOfMemoryError

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

      阅读所有 5 节课并再次重写您的代码。如果它仍然不起作用,我们将很高兴看到您在教程材料中做错了什么。

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

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

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

      Android:java.lang.OutOfMemoryError

      java.lang.OutOfMemoryError

      OutOfMemoryError: 位图大小超出虚拟机预算的解决方案

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

      【讨论】:

        猜你喜欢
        • 2011-11-25
        • 2013-07-27
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 2013-08-05
        • 1970-01-01
        • 2022-01-06
        • 2011-02-26
        相关资源
        最近更新 更多