【发布时间】:2015-12-14 14:44:02
【问题描述】:
我很难找到可能的内存泄漏。 我有一个 Activity 在后台做一些繁重的工作。
完成一些任务后,应用程序消耗了太多内存。好像没有清理干净。
这是默认状态下的Activity:
如果我运行 Activity 正在执行的任务,就会分配越来越多的内存。
起初我以为这一定是内存问题,导致 GC 无法正确释放内存。据我所知,如果没有对对象的引用,GC 可以释放内存。对吗?
现在让我感到困惑的部分来了:
如果我从 Android Studio 运行 GC,内存会被正确清理,并且我的 Activity 永远不会关闭。当分配了太多内存时,我只需要使用 Android Studio GC。
这就是我的意思:
一般来说问题是:
为什么Android Studio GC可以正常清理内存,为什么不能与自动android GC一起正常工作?
我知道这是一个非常笼统的问题。我只是想知道,是否有不同类型的垃圾收集或类似的东西。
同时调用System.gc(); 并不能正确清理内存。
其他信息:
Moto G 第二代
Android 5.0.2。
【问题讨论】:
-
"有时候Activity或者app会关闭,我想可能是内存问题造成的。"如果应用程序死机 b/c 内存不足,您将得到一个内存不足异常,您可以在 Logcat 中清楚地看到该异常。我的预感是您的应用程序因其他原因而崩溃。尝试通过 logcat 查看崩溃原因。
-
并发 GC 只进行部分收集,以免引起明显的暂停。显式 GC(例如由 Studio 触发的 GC)会执行完整的 GC 扫描。部分阅读:source.android.com/devices/tech/dalvik/gc-debug.html
-
@Shmuel 没有例外。甚至没有警告。
-
@oberflansch 这是在什么手机上运行的?安卓操作系统版本?请尽可能多地更新帖子。
-
@Shmuel 感谢您的付出。很难相信应用程序会关闭,我知道。这可能与android版本有关。但我通常对 GC 行为感兴趣。抱歉,如果我没有明确说明这一点。这个结束的问题只是一些背景信息。
标签: java android garbage-collection