Android Studio 中的 GC 和 java 堆分析

GC and java heap analysis in Android Studio

我正在 Android Studio 中玩耍以了解有关内存泄漏的更多信息。

我注意到,在旋转屏幕几次后,我看到 activity 的多个实例(在单击 "Initiate GC" 和 "Dump Java Heap" 之后)。

但是当我点击 2 次 "Initiate GC",然后点击 "Dump Java Heap",我看到我的 activity 和它的内部 类 只有 1 个实例.

为什么我必须在 "Initiate GC" 上单击两次才能清除 activity 个实例?我是否在泄漏内存?

编辑:我也注意到在创建一个空白的新项目时会发生这种情况 activity。所以我可能没有泄漏任何内存,但我仍然想知道为什么实例没有在第一次 GC

上被销毁

"Initiate GC" 按钮是向 GC 运行 发出的信号。 当Java GC 运行s时,不保证所有可以清除的内存引用,都会在本次GC 运行.

时被清除

这只是 GC 到 运行 的触发器。 当 GC 运行s 本身具有相同的行为时。

所以你必须多次点击 "Initiate GC" 直到你确认你担心泄漏的对象已经被 GC 清除。

那里有很多信息,例如这个话题 How to force garbage collection in Java?