加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – shutdown hook和finalizer方法

发布时间:2020-12-14 05:44:35 所属栏目:Java 来源:网络整理
导读:我只是不明白为什么必须使用Runtime.addShutdownHook.如果你想在jvm退出时做一些清理,那为什么不只是重载守护进程类的finalize方法.使用shutdown hook超过finalize方法的优点是什么? 还有一个不推荐使用的函数runFinalizersOnExit.如果我把它设置为false,我
我只是不明白为什么必须使用Runtime.addShutdownHook.如果你想在jvm退出时做一些清理,那为什么不只是重载守护进程类的finalize方法.使用shutdown hook超过finalize方法的优点是什么?

还有一个不推荐使用的函数runFinalizersOnExit.如果我把它设置为false,我相信finalizer不会运行.这与java保证终结者总是在垃圾回收之前运行.

解决方法

不能保证终结者将永远不会运行.当对象被垃圾回收时,调用finalize().但是当程序运行时,垃圾收集器可能不会收集任何东西.

当jvm正常退出时,运行关闭挂钩.所以即使这不是100%保证,但它是相当接近.只有几个边缘情况下关闭挂钩不运行.

编辑
我查找了没有执行关机挂钩的边缘情况

执行关机挂钩:

>当所有JVM线程完成执行时
>因为调用System.exit()
因为用户打CNTRL-C
>系统级关机或用户注销

关机挂钩不执行:

>如果由于本地代码中的错误导致VM崩溃,则无法保证挂起是否运行.
>如果使用Linux上的-kill命令或Windows上的终止进程终止JVM,则JVM将立即退出

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读