欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入
四、很神秘的finalize()方法
finalize()方法的确很神秘,是因为你不了解其原理。
原理:1、finalize()方法是Object中的方法。
2、finalize()方法会在对象被垃圾回收之前被垃圾回收器调用一次,这是Java语言的一种机制。
3、finalize()方法在任何对象上最多只会被垃圾回收器调用一次。
陷阱:1、垃圾回收器无法保证垃圾对象能被回收,因此,finalize()方法也无法保证运行。建议不要重写finalize()方法,即使重写,也不要在finalize()方法中写关键的代码。
2、finalize()方法中可以把自己传递个别的对象,这样就不是垃圾了,避免了被回收。但是当下次这个对象又符合垃圾回收的时候,finalize()方法不会被调用第二次了,而是直接被清理掉了。
总结:
理解了垃圾回收的前提是理解Java运行时的内存堆栈模型。
理解Java垃圾回收的目的是为了对Java内存管理有个认识,在编程时更有效的使用内存。
不建议为了垃圾回收,手动编写大量代码,这是很愚蠢的做法。可以通过简单的方式去影响即可。
本文的讨论的垃圾回收排除String对象。String的垃圾回收与String池有很很大关系,目前还没有研究。但是文中已经提及String使用中容易出现的问题。
[1][2]
有一些喷着香水闻不到的空气,有一些在写字楼里永远遇不见的人。