Android Studio如何启动垃圾收集器以及它如何工作?

时间:2015-12-14 14:44:02

标签: java android garbage-collection

我很难找到可能的内存泄漏。 我有一个活动,在背景中做了一些繁重的工作。

完成某些任务后,该应用程序会消耗太多内存。它似乎没有得到适当的清理。

这是处于默认状态的活动:

enter image description here

如果我运行Activity正在执行的任务,则会分配越来越多的内存。

一些工作后的活动: enter image description here

起初我认为这必须是内存问题,因为GC无法正常释放内存。据我所知,如果没有对象的参考,GC可以释放内存。这是对的吗?

现在出现让我困惑的部分:

如果我从Android Studio运行GC,则会正确清理内存并且我的活动永远不会关闭。我只需要在分配大量内存时使用Android Studio GC。 enter image description here

这是我的意思:

enter image description here

一般来说问题是:

为什么Android Studio GC可以正确清理内存,为什么它不能与自动android GC一起正常工作?

我知道这是一个很普遍的问题。我只是想知道,如果有不同类型的垃圾收集或类似的东西。

同时调用System.gc();不会正确清理内存。

其他信息:

Moto G 2nd gen

Android 5.0.2。

2 个答案:

答案 0 :(得分:4)

由于多种原因,可能会发生内存泄漏。一个常见原因是位图无法正确回收。内存泄漏的其他种子是将上下文保留在对象中。例如,您启动异步任务并传递上下文,因为稍后您需要它。当异步任务正在运行时,它会保留对上下文的引用,因此整个活动都在内存中。这也是非常频繁的匿名和内部类,它们引用了通常是片段或活动的父类。

我建议您使用库泄漏金丝雀来发现内存泄漏,并使用Android工具跟踪分配,以便准确发现内存泄漏的位置。

答案 1 :(得分:2)

也许您可以尝试在繁重的处理代码中定期明确地调用System.gc();