ITPUB论坛 » Java web开发及框架技术 » 提问:Spring的destroy-method与Java自身的finalize()有没什么区别?
新一届的微软MVP评选已经开始,欢迎各位推荐!
2008-7-1 16:17 stliaobin
提问:Spring的destroy-method与Java自身的finalize()有没什么区别?

spring的destroy-method在Bean被回收前执行,
java Object类的finalize()方法,也是用于在对象被回收前自动执行

感觉好像spring多此一举

不知道大家有什么看法

2008-7-1 16:22 ericlntm
完全不一样的阿,执行者都不一样,destroy-method是可以手动要求destroy干什么,而finalize是不知道什么时候会调用啊。finalize是垃圾回收机制,而destroy-method怎么说呢,像个代理模式一样在这行为时做什么,destroy-method一般不做垃圾回收的工作。

2008-7-1 16:52 justforregister
[quote]原帖由 [i]ericlntm[/i] 于 2008-7-1 16:22 发表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=10821171&ptid=1014809][img]http://www.itpub.net/images/common/back.gif[/img][/url]
完全不一样的阿,执行者都不一样,destroy-method是可以手动要求destroy干什么,而finalize是不知道什么时候会调用啊。finalize是垃圾回收机制,而destroy-method怎么说呢,像个代理模式一样在这行为时做什么,destroy-method一般不做垃圾回收的工作。 [/quote]
nice job:rose:

2008-7-1 16:55 st_liaobin
我们不用去管这两个方法的执行者是谁,各自的实现机制有什么不一样(这些我都非常清楚),这不是问题的重点

问题是我认为这两种方法最终的使用效果是一样,我在destroy-method里干的事,放到finalize里最终得到的结果是一样的。
比如某个Bean我需要它在被销毁前释放数据库连接,那么我可以在destroy-method里做这个事。但是在finalize里也可以做这个事。从使用效果上来看没差别啊。

ericlntm说finalize不知道什么时候会调用。这是不对的,finalize在被垃圾回收机制销毁前一定会执行,其一般用法也是释放手中持有资源。finalize也只不过是一个普通的方法,显式的调用它也没什么问题,又不会真的激发垃圾回收,它也只是一个垃圾回收器的回调方法。从作用,一般用法,执行时间,执行方式上来说这与destroy-method完全一样。

2008-7-1 17:55 justforregister
[quote]原帖由 [i]st_liaobin[/i] 于 2008-7-1 16:55 发表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=10821829&ptid=1014809][img]http://www.itpub.net/images/common/back.gif[/img][/url]
我们不用去管这两个方法的执行者是谁,各自的实现机制有什么不一样(这些我都非常清楚),这不是问题的重点

问题是我认为这两种方法最终的使用效果是一样,我在destroy-method里干的事,放到finalize里最终得到的结果是一样的。
比如某个Bean我需要它在被销毁前释放数据库连接,那么我可以在destroy-method里做这个事。但是在finalize里也可以做这个事。从使用效果上来看没差别啊。

ericlntm说finalize不知道什么时候会调用。这是不对的,finalize在被垃圾回收机制销毁前一定会执行,其一般用法也是释放手中持有资源。finalize也只不过是一个普通的方法,显式的调用它也没什么问题,又不会真的激发垃圾回收,它也只是一个垃圾回收器的回调方法。从作用,一般用法,执行时间,执行方式上来说这与destroy-method完全一样。 [/quote]
呵呵, 死磕着不放啊,

2008-7-1 17:57 justforregister
建议你去读读,那个api,
finalize在垃圾回收的时候一定会被掉的,  但垃圾回收根本不知道是在今天还是在明天

2008-7-1 19:45 Sky-Tiger
别指望finalize

2008-7-2 09:08 iooyoo
finalize在被垃圾回收机制销毁前一定会执行
是一定会,就是不知道会是什么时候

显式调用destory释放敏感资源和等待jvm调度来控制资源释放, 看怎么选了

2008-7-2 17:42 st_liaobin
finalize在被垃圾回收机制销毁前一定会执行,就是不知道会是什么时候,没错。
但destroy-method在spring销毁Bean的时候也一定会执行,但是spring什么时候销毁Bean?

页: [1]


Powered by ITPUB论坛