打印

[Java] 提问:Spring的destroy-method与Java自身的finalize()有没什么区别?

提问:Spring的destroy-method与Java自身的finalize()有没什么区别?

提示: 作者被禁止或删除 内容自动屏蔽

TOP

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

TOP

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

TOP

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

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

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

TOP

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

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

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

TOP

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

TOP

别指望finalize
[size=4][b]-----孰能浊以静之徐清 孰能安以动之徐生-----[/b][/size] ---------------- [img]http://tmpimg.com/files/1538/fortiger.jpg[/img] [size=3][b][u][color=red]天神MM作品 版权所有 翻版必究[/color][/u][/b][/size]

TOP

finalize在被垃圾回收机制销毁前一定会执行
是一定会,就是不知道会是什么时候

显式调用destory释放敏感资源和等待jvm调度来控制资源释放, 看怎么选了
[php] 使君欲醉离亭酒 酒醒离愁转有 紫禁多时虚右 苕霄留难久 一声歌掩双罗袖 日落乱山春后 犹有东城烟柳 青荫长依旧 [/php]

TOP

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

TOP


感谢一直以来您对我们的支持!
当前时区 GMT+8, 现在时间是 2008-12-3 08:42 京ICP证060528 号

Designed By 17DST