最近了解了一下Java中ShutdownHook的特性,网上有几篇讲述得很全面的文章,做些记录如下:
1、ShutdownHook在某些情况下不会运行
ShutdownHook从不不保证一定会运行。当JVM由于内部原因崩溃,或接收到操作系统发送的SIGKILL命令等,关闭钩子来不及运行JVM进程就已经退出。
2、ShutdownHook可能在运行过程中被中止
操作系统在关闭过程中,发送SIGTERM命令给JVM,如果JVM不能在一定的时间内结束,例如ShutdownHook执行时间过长等,那ShutdownHook就很有可能在执行过程中被中止。
所以ShutdownHook必须能快速执行完,避免会发生阻塞的IO操作或锁相关的操作。
3、当存在多个ShutdownHook时,JVM在执行的时候不保证顺序
在jdk1.5的Shutdown类中,可以看到ShutdownHook都保存在一个HashSet中,JVM退出时迭代整个HashSet并分别调用线程的start方法。并发执行,而不是添加时的顺序。
4、在JVM关闭过程中不能添加或者去除ShutdownHook
当JVM开始关闭,则不允许再进行ShutdownHook的添加和删除操作,否则抛出IllegalStateException,即不能在ShutdownHook中添加或去除ShutdownHook。
5、不能在ShutdownHook中调用System.exit()
当在ShutdownHook中调用System.exit(),不会停止ShutdownHook反而会卡住整个JVM,只能kill -9强制中止进程(jdk1.5进行了验证)。但可以调用Runtime.halt()。
6、ShutdownHook抛出的异常和其他普通异常一样,由Uncaught Exception Handler进行处理
7、如果创建匿名内部线程类作为ShutdownHook线程,则容易发生内存泄漏。
这个是开发中遇到的问题,工具函数以匿名内部类的方式创建了很多ShutdownHook,由于内部匿名类会持有外层类的引用,导致外层类对象也一直无法释放。
引用:Know the JVM 2 : Shutdown Hooks

Shutdown Hook相关推荐

  1. nodemanager不能正常关闭_Java虚拟机关闭钩子(Shutdown hook)

    作者:俩右 出处:https://segmentfault.com/a/1190000038298447 源码点击 study:https://github.com/xiaoshuanglee/stu ...

  2. java hook全局钩子,牛逼骚操作:Java 虚拟机关闭钩子(Shutdown Hook)!

    码农每日一题 长按关注,工作日每天分享一个技术知识点. Shutdown Hooks 是一种特殊的结构,它允许开发人员插入 JVM 关闭时执行的一段代码. 用途 Application 正常退出(所有 ...

  3. Unable to register Log4j shutdown hook because JVM is shutting down. Using SimpleLogger 问题分析

    最近在弄K8S集群中的pod优雅停机 @org.springframework.context.event.EventListener(ContextClosedEvent::class)fun on ...

  4. Java 进程的退出机制与Shutdown hook

    基本概念 进程与线程:一个进程包含多个线程,一个进程中所有线程都退出后,该进程才会退出. 用户线程与守护线程:任一用户线程未退出,JVM进程不退出,当所有用户线程都退出时, 守护线程线程自动退出. S ...

  5. java8:关闭钩子shutdown hook

    参考资料: <Java中的关闭钩子(shutdown hook)> <JVM 的关闭钩子> 写在开头:本文为学习后的总结,可能有不到位的地方,错误的地方,欢迎各位指正. 目录 ...

  6. JAVA虚拟机关闭钩子(Shutdown Hook)

    Java程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.JAVA中的ShutdownHook提供了比较好的方案. JDK提供了Java ...

  7. layui.open 关闭之后触发_JAVA虚拟机关闭钩子(Shutdown Hook)

    前言 当你认真的去看一个组件的源码的时候,你会经常看见这种关闭钩子的函数,如果你不了解的话,谷歌一下,你就会发现如下文章就是搜索引擎出来的第一篇,不愧是出自我们优秀的厮哒哒之笔. 正文 Java 程序 ...

  8. 高并发编程-Runtime.getRuntime().addShutdownHook为自己的应用添加hook

    文章目录 概述 使用场景 注意事项 示例 概述 一句话概括就是: ShutdownHook允许开发人员在JVM关闭时执行相关的代码. 我们可以使用java.lang.Runtime.getRuntim ...

  9. GRPC: 如何优雅关闭进程(graceful shutdown)

    简介: 本文将介绍优雅关闭 gRPC 微服务.在进程收到关闭信号时,我们需要关闭后台运行的逻辑,比如,MySQL 连接等等. 介绍 本文将介绍优雅关闭 gRPC 微服务. 什么是优雅关闭? 在进程收到 ...

最新文章

  1. struts2 实现多文件限制上传
  2. R语言与Tableau集成之可视化应用
  3. Linux Network Administrators Guide
  4. Java删除properties配置文件中指定键值的代码
  5. Ansible 七(ad hoc任务)
  6. HTML与CSS基础之选择器优先级(十)
  7. Java 中 List 分片的 5 种方法!
  8. 计算机和HMI设备通信之程序上下载
  9. Freemarker 的常见控制结构写法(ZT)
  10. 老李分享:5个衡量软件质量的标准
  11. mysql 4,mysql 4.1,mysql 数据库中文问题
  12. Mybatis 传参问题
  13. CvCreateImage函数说明
  14. 计算机专业论文推荐,计算机专业论文参考文献推荐
  15. PMP-强化练习题一(180题答案及解析)
  16. 超声波测距原理与实现
  17. nyoj-动态规划-234-吃土豆-201308131021
  18. oracle 客户端的安装失败,关于安装oracle 11g client 出现安装先决条件检查全部失败...
  19. 【Python】多文件夹图片重命名
  20. 致远OA管理员密码的重置

热门文章

  1. 微信第三方登录 -- (PC端+移动端)
  2. 有计算机信息高新技术考试合格证,待遇怎么样?
  3. [附源码]计算机毕业设计springboot电子相册管理系统
  4. 关于敏捷开发的一点总结与感悟
  5. 将命名空间导出到 NFS-GANESHA
  6. 你知道智能机柜与普通机柜有哪些区别吗
  7. 《华为机试》——MP3光标位置 及 洗牌
  8. 【免费软件】如何解决 Mac 移动硬盘不能写入
  9. 整理关于牛人们对图书管理系统领域建模的精彩讨论,以此希望大家学习下别人是如何思考的...
  10. [Windows Server 2012] 安装护卫神·主机管理系统