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自身持有的对象,比如系统类加载器等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。