JAVA Finalizable对象为啥会爆内存溢出

来源:互联网 发布:免费费用报销软件 编辑:程序博客网 时间:2024/06/05 18:13

Finalizable对象就是重写了Object.finalize方法的类对象,都说他会引起内存溢出,那么我们先看看它的生命周期


我们看到Finazable对象实际上至少要经过2次GC才可能被回收,只有在被FinalizerThread处理过后,才会被GC回收,但是恰恰这个线程优先级比较低,在系统资源竞争激烈的情况下,很可能不会及时调用对象的finalize方法,那么堆积的对象可能直接进入old gc,引起full gc影响系统性能和吞吐量, 甚至内存溢出,伤不起。

参考资料:

http://www.infoq.com/cn/articles/jvm-source-code-analysis-finalreference/

http://blog.csdn.net/lurao/article/details/51225439

http://it.deepinmind.com/gc/2014/05/13/debugging-to-understand-finalizer.html

http://www.open-open.com/lib/view/open1427094910371.html