如何修复 Java 中的 OutOfMemory 错误?

Posted

技术标签:

【中文标题】如何修复 Java 中的 OutOfMemory 错误?【英文标题】:How can I fix an OutOfMemory error in java? 【发布时间】:2016-11-14 01:36:57 【问题描述】:

我有 8 个不同的活动,它们在随机单击按钮时相互打开。单击打开新活动的按钮大约 15 次后,它会崩溃。我需要关闭活动还是有其他解决方案?

【问题讨论】:

也许先解决他们重复打开对方的问题? 我希望它这样做。我想要一个连续的循环。我正在寻找类似于随机播放和重复所有音乐播放器的东西,除了活动。还是我应该在一个活动中完成所有这些工作? 您应该希望通过更少的活动来解决这个问题...... 【参考方案1】:

正如 Harsh Pandey 所说,您可能希望研究使用片段而不是活动。另一种可能的方法是在您开始下一个活动后立即致电finish();。这将关闭上一个活动。但是,如果您打算使用后退按钮或其他东西返回此活动,则它不会存在。

【讨论】:

【参考方案2】:

当您创建新的活动并关闭它们时,GC 会在需要时自动清理旧活动使用的内存。您遇到内存不足错误,因为,

您的活动阻止了一个仍然存在的引用。这将阻止 GC 清理旧的活动。

例如,

查找未正确清除的动画。

解决这个问题的最好方法是找到内存泄漏。

https://developer.android.com/studio/profile/investigate-ram.html

建议:

正如 3kings 所说,尝试在一项活动中完成。即使用片段!!

【讨论】:

【参考方案3】:

您可以通过在清单中添加以下内容来请求更多堆大小:

android:largeHeap="true"

但是,根据您的评论,我猜这种情况非常适合片段,而不是活动。您可以在一个 Activity 中使用多个可重复使用的片段来完成所有这些工作。

【讨论】:

以上是关于如何修复 Java 中的 OutOfMemory 错误?的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 ZipFileSet 提取大 jar 时出现 OutOfMemory 错误

c# 出现OutofMemory错误

JVM-OutOfMemory异常重现

如何在生产环境中调试 java heap OutOfMemory 错误?

如何定位OutOfMemory的根本原因

如何修复netbeans中的java语言级别错误