Android JVM可达性的理解

说到JVM可达性,我们不得不讲讲隐式引用的概念,什么是隐式引用?

- 隐式引用:非静态内部类和非静态匿名内部类,在编译器编译过程中,隐式的为我们传入了this,这就是我们可以在方法中使用this这个关键字的原因,了解了隐式引用,那么为什么它会是导致内存泄漏? 这里又得说明一下虚拟机的垃圾回收策略。
- 垃圾回收策略:Java采用根搜索算法,当GCRoots不可达时,才会回收。也就是说GC会收集那些不是GCRoots且没有被GCRoots引用的对象。
- 可达性:只要在内存中存在就意味着没有被回收,就是可达性,比如,对象A和对象B,对象A引用了对象B,此时对象A存在于栈帧中,从A这个GCRoot作为根起点向下搜索的引用链中包含了对象B,那么这两个对象均具有可达性,且不会被回收(这也就是Handle持有Activity之后,Activity关闭后可能未被回收的原因)

你可能感兴趣的:(Android JVM可达性的理解)