您的位置:首页 > 移动开发 > Android开发

Android(jave)中关于finalize必须要注意的几件事

2014-11-19 11:07 337 查看
java.lang.ref.FinalizerReference 是 Java/Dalvik GC 相关的一个类,所有 Override finalize() 方法的 Object,最后都会被 FinalizerReference 类的静态变量引用,所有当它们没有强引用时不会被
VM 立即回收,而是 『在GC时』会将这些 Override finalize() 方法的 Object 压入到 ReferenceQueue 中。同时会有一个守护线程『Finalize Daemon』来真正处理调用他们的 finalize() 函数,实现垃圾回收。所以,以下的几件事情,必须要注意:

1.   finalize() 方法被执行的时间是不确定,所以不能依赖它来释放紧缺的资源。
2.   重载了 finalize() 方法的 object 需要至少经过两轮 GC 才有可能被释放,所以在 OOM 的瞬间,java.lang.ref.FinalizerReference 依然还是持有这么高的内存没有释放,这样级就拖慢了释放的速度。

这样,为了内存的高效使用,我们有以下的开发准则:

1.  紧缺资源不要依赖finalize()来释放。
2.  尽量不要重载finalize()。
3.  如果必须重载finalize(),一定要记得调用super.finalize,也建议把类实现成单例模式(较少FinalizerReference占用)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 内存 dalvik java oom