java – shutdown hook和finalizer方法

前端之家收集整理的这篇文章主要介绍了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

猜你在找的Java相关文章