android - 有没有办法预测和防止 OOM 异常?

标签 android exception out-of-memory inputstream

我从 HttpUrlConnection 对象获取输入流。 http 响应是一个 JSON 格式的网页,其大小大于 50 Mb。

通过将此输入流放入字符串变量中,我的应用程序最终因致命异常而崩溃 OutOfMemoryError:无法分配 51096576 字节分配,其中 25165824 个可用字节和 47MB 直到 OOM,最大允许占用空间 244303608,增长限制 268435456

应用程序似乎无法为该字符串分配所需的内存。

有没有办法预测 OOM 异常? (例如,当输入流几乎耗尽所有堆时。至少,当这种情况即将发生时,我可以改变我的应用程序的行为)

最佳答案

Is there a way to anticipate an OOM exception ?

不,对不起。

say for example, when the inputStream will almost eat up all of the heap

这不是 OutOfMemoryException 的原因。当您尝试分配内存块但没有足够大的空闲内存块来满足您的请求时,您会收到 OutOfMemoryException

在您的情况下,您有足够的可用堆空间。您要求分配一个巨大的 block 。

By getting this input stream into a string variable

这就是你困难的根源。使用流式 JSON 解析器(Jackson 和 Gson 都具有流式模式 IIRC)并以小块形式使用 JSON。

关于android - 有没有办法预测和防止 OOM 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57273331/

相关文章:

javascript - jQuery-UI:未捕获的语法错误:意外的标记

haskell - `Except` 的复杂性在 Haskell 中有何用途?

java - 从 java : OutOfMemory 中的 xml 解码大型 base64

java - 循环遍历中等大小的数据集时,Kotlin 出现内存不足错误

android - 带有谷歌地图的 fragment : inflater. 在 ViewPager 中销毁并重新创建时膨胀崩溃?

php - 如何从 php 从 android 推送通知

Android 3.0,小部件预览

android - 如何动态减小 TextView 的大小

java - XSS攻击: change exception thrown in a Spring Boot CRUDRepository ?

python - 屏蔽 numpy 数组时出现 MemoryError