【问题标题】:Is GC guaranteed to free memory of unused activitiesGC 是否保证释放未使用活动的内存
【发布时间】:2016-10-19 21:29:38
【问题描述】:

我正在尝试分析Android 应用程序的内存使用情况。我这样做是使用

adb shell dumpsys meminfo <package name>

我的应用只有一个Activity,我可能会重复以下步骤十几次:

  1. 打开应用;
  2. 使用返回按钮退出

在这样做了十几次之后,dumpsys 显示我的 Activities 的大约 1-2 个实例仍在内存中。在我点击adb dumpsys 几次之后,Activity 计数下降到零。这是正常的吗?如果是泄漏,我不希望 Activity 计数降至零。这是否意味着GC 缓慢地索取Activity 对象的内存?

【问题讨论】:

  • 尝试使用 LeakCanary github.com/square/leakcanary 分析您的应用程序的内存使用情况。您将能够更轻松地查明问题。
  • @EricBachhuber 谢谢。我确实使用了泄漏金丝雀并摆脱了泄漏。我现在只剩下误报了,Leak Canary 认为活动已经泄露,后来说“GC 很懒惰”。所以我认为泄漏金丝雀明智我没有泄漏。

标签: android android-activity memory-leaks garbage-collection activity-lifecycle


【解决方案1】:

这是否意味着 GC 缓慢地声明活动对象的内存?

按下后退按钮完成Activity 并不意味着它的实例将立即被杀死并且内存GC-ed。 ActivityonDestroy() 方法不是“终结器”。当启动一个新的Activity 实例时,“旧”实例仍在内存中(作为reference),可能会遇到这种情况。

如果是泄漏,我预计活动计数不会降为零。

如果您看到应用程序的进程正在运行,这不是泄漏,因为“活动计数降至零”

在我点击 adb dumpsys 几次后,活动计数降至零。这正常吗?

是的,由于上述原因。

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 2019-11-02
    • 2015-08-08
    • 1970-01-01
    相关资源
    最近更新 更多