再谈Finalizer对象--大型App中内存与性能的隐性杀手
在上一篇《提升Android下内存的使用意识和排查能力》的文章中,多次提到了Finalizer对象。也可以看到该对象的清理至少是需要两次GC才能完成,而在Android5.0,尤其是6.0以后的系统中,对于该对象的回收变得更加的慢。我们在开发的时候往往关注内存的分配、泄漏,却容易忽视Finalizer对象,其实在大型App中,该对象是引起内存和性能问题的一个不可忽视的元凶。在类似于双十一会场的界面中,在使用一段时间后,设备会变得越来越慢,内存使用量也不断攀升,甚至容易引发OOM,这个有一个重要原因就和Finalizer对象的过度使用有关。为什么过度的使用Finalizer对象会对性能和内存都造成危害呢?我们不妨来看下Finalizer对象的原理。 一、Finalizer对象创建过程带来的开销 Finalizer对象是指Java类中重写了finalize方法,且该方法不为空的对象。当运行时环境遇到创建Finalizer对象的时候,既创建对象实例的时候,会先判断该对象是否是Finalizer对象,如果是,那么在构造函数过程中会把生成的对象再封装成Finalizer对象并添加到 Fina...


