热门搜索 :
考研考公
您的当前位置:首页正文

Android面试一问一答:Handler内存泄漏

来源:东饰资讯网

Handler为什么会内存泄露

  • Handler会持有Activity的引用,如果有Message没有被处理或者没有处理完,由于Message会持有Handler的引用,所以造成生命周期长的对象持有生命周期短的对象的引用,从而Activity和Handler不能被释放,造成内存泄露。

如果Message处理完之后,这些内存可以被回收吗

  • Message处理完之后,Message就不能被GC Root的可达性搜索查找到,失去关联关系,这一连串内存都会被回收。

常见的GC Root有哪些

  • 通过System Class Loader或者Boot Class Loader加载的class对象,通过自定义类加载器加载的class不一定是GC Root

  • 处于激活状态的线程

  • 栈中的对象

  • JNI栈中的对象

  • JNI中的全局对象

  • 正在被用于同步的各种锁对象

  • JVM自身持有的对象,比如系统类加载器等。

Top