前端之家收集整理的这篇文章主要介绍了
java – shutdown hook和finalizer方法,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我只是不明白为什么必须使用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将立即退出
原文链接:https://www.f2er.com/java/121515.html