我为此实验启动了一个全新的示例项目。该应用程序有一个活动。
此时我运行应用程序并转储 Java 堆。结果如下所示:
伟大的!一切看起来都是正确的。“总计数”和“堆计数”为 1。正是我所期望的。
让我们旋转我的设备 3 次。在这一点上,我仍然希望只看到 1 个 MainActivity,但我知道已经创建了 4 个。让我们来看看。
嗯……这很奇怪。它显示 4。这怎么可能?也许活动还在。未引用...但它们还没有被 GC 处理。让我们强制 GC 并进行另一个堆转储。
奇怪的。它仍然在 4。这就是我迷路的地方。听起来总计数或堆计数应该为 1。它只是保持 MainActivity 的每个引用吗?那是泄漏吗?观众是不是错了?
Total Count(根据文档)是“未完成的实例总数”。
也许堆计数?“选定堆中的实例数。” 好吧,这听起来更像是我想要的。我想要具有 gc 根的实例(真实实例)的数量。
有谁知道为什么会这样?