还有一个不推荐使用的函数runFinalizersOnExit.如果我把它设置为false,我相信finalizer不会运行.这与java保证终结者总是在垃圾回收之前运行.
当jvm正常退出时,运行关闭挂钩.所以即使这不是100%保证,但它是相当接近.只有几个边缘情况下关闭挂钩不运行.
编辑我查找了没有执行关机挂钩的边缘情况
执行关机挂钩:
>当所有JVM线程完成执行时>因为调用System.exit()因为用户打CNTRL-C>系统级关机或用户注销
关机挂钩不执行:
>如果由于本地代码中的错误导致VM崩溃,则无法保证挂起是否运行.>如果使用Linux上的-kill命令或Windows上的终止进程终止JVM,则JVM将立即退出