【问题标题】:I'm getting "OutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack available" in Android我在 Android 中收到“尝试抛出 OutOfMemoryError 时抛出 OutOfMemoryError;没有可用堆栈”
【发布时间】:2015-03-30 05:59:32
【问题描述】:

直到昨天我的应用程序运行良好,但我所做的是,由于某些原因,我不得不在 Android Studio 中打开具有不同工作空间的同一个应用程序。从那时起,当我尝试运行该应用程序时,我遇到了以下异常,因此我删除了新创建的工作节奏,但我仍然遇到以下胖异常。

 Throwing   OutOfMemoryError "Failed to allocate a 170 byte allocation with 74 free bytes and 74B until OOM" (recursive case)
"main" prio=5 tid=1 Runnable
| group="main" sCount=0 dsCount=0 obj=0x74430970 self=0xb4606800
| sysTid=1905 nice=0 cgrp=apps sched=0/0 handle=0xb777c160
| state=R schedstat=( 0 0 0 ) utm=83 stm=36 core=0 HZ=100
| stack=0xbf15b000-0xbf15d000 stackSize=8MB
| held mutexes= "mutator lock"(shared held)
at java.lang.String.<init>(String.java:233)
at java.lang.String.<init>(String.java:191)
at java.io.ByteArrayOutputStream.toString(ByteArrayOutputStream.java:175)
at java.util.jar.ManifestReader.readValue(ManifestReader.java:181)
at java.util.jar.ManifestReader.readHeader(ManifestReader.java:107)
at java.util.jar.ManifestReader.readEntries(ManifestReader.java:59)
at java.util.jar.JarVerifier.verifyCertificate(JarVerifier.java:311)
at java.util.jar.JarVerifier.readCertificates(JarVerifier.java:268)
at java.util.jar.JarFile.getInputStream(JarFile.java:380)
at libcore.net.url.JarURLConnectionImpl.getInputStream(JarURLConnectionImpl.java:222)
at java.net.URL.openStream(URL.java:470)
at java.lang.ClassLoader.getResourceAsStream(ClassLoader.java:444)
at java.lang.Class.getResourceAsStream(Class.java:1334)
at com.google.m.a.a.a.a(unavailable:-1)
at com.google.m.a.a.a.a(unavailable:-1)
at com.google.maps.api.android.lib6.b.e.<init>(unavailable:-1)
at com.google.maps.api.android.lib6.b.e.<init>(unavailable:-1)
at com.google.maps.api.android.lib6.b.e.a(unavailable:-1)
at com.google.maps.api.android.lib6.c.dz.a(unavailable:-1)

 [ 03-30 11:13:03.162  1905: 1914 I/art      ]
Clamp target GC heap from 64MB to 64MB

--------- beginning of crash
03-30 11:13:03.179    1905-1905/com.example.myothermap E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.myothermap, PID: 1905
java.lang.OutOfMemoryError: OutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack available

我该如何从中恢复?

【问题讨论】:

  • @Kesh1234 您提供的链接很好,但不是针对我的问题
  • 您尝试过这些解决方案吗?您是否尝试删除旧的 AVD 并创建一个新的并尝试一下?
  • 你试过在其他设备或模拟器上运行吗?它会抛出同样的异常吗?
  • 您使用的是 avd 还是真实设备?可以试试设备吗?

标签: android


【解决方案1】:

将此行添加到应用程序标记内项目的清单文件中。

android:largeHeap="true"

喜欢这个

<application
    android:largeHeap="true"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar" >

【讨论】:

  • 并非在所有情况下都建议使用 largeHeap,请谨慎使用,它可能会减慢其他正在运行的应用程序,并且还会影响您的应用程序的响应性,因为垃圾收集器的请求频率更高。有关更多信息,请查看来自 google i/o youtube.com/watch?v=_CruQY55HOk 的演讲
  • @Mood 指出正确。这个答案比解决方案造成的伤害更大。
【解决方案2】:

尝试将其添加到您的构建 gradle:

在 Android 标签内添加这段代码

dexOptions {
    javaMaxHeapSize "4g"
}

【讨论】:

  • 嘿,谢谢你的建议。我很乐意尝试,但在我的情况下,错误来自我们绘制的大图像。你认为它还会起作用吗?因为“android:largeHeap="true"” 配置无法防止这种崩溃
  • 并不总是推荐使用 largeHeap。它会比有解决方案解决更多的问题。 maxHeapSize 应该适合你。如果有请告诉我
  • 是运行时崩溃,与编译时内存无关
猜你喜欢
  • 2018-09-02
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
相关资源
最近更新 更多