我发现了一个用于在 Android(Java)中检测内存泄漏的库,叫做LeakCanary,但是我无法理解他们泄露内存的示例。有人能否解释一下为什么他们示例中的代码是内存泄漏,以及为什么会出现这种情况?
class Cat {
}
class Box {
Cat hiddenCat;
}
class Docker {
static Box container;
}
// ...
Box box = new Box();
Cat schrodingerCat = new Cat();
box.hiddenCat = schrodingerCat;
Docker.container = box;
然后他们观察变量schrodingerCat
是否泄漏,这导致一个泄漏如下所示(我不知道如何将其与上述代码相关联)。
* GC ROOT static Docker.container
* references Box.hiddenCat
* leaks Cat instance
任何关于漏洞解释以及检测与之相关的帮助都将非常有用。对于初学者来说,一些好的文章也会很不错。谢谢!