Shutdown Hook
最近了解了一下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相关推荐
- nodemanager不能正常关闭_Java虚拟机关闭钩子(Shutdown hook)
作者:俩右 出处:https://segmentfault.com/a/1190000038298447 源码点击 study:https://github.com/xiaoshuanglee/stu ...
- java hook全局钩子,牛逼骚操作:Java 虚拟机关闭钩子(Shutdown Hook)!
码农每日一题 长按关注,工作日每天分享一个技术知识点. Shutdown Hooks 是一种特殊的结构,它允许开发人员插入 JVM 关闭时执行的一段代码. 用途 Application 正常退出(所有 ...
- Unable to register Log4j shutdown hook because JVM is shutting down. Using SimpleLogger 问题分析
最近在弄K8S集群中的pod优雅停机 @org.springframework.context.event.EventListener(ContextClosedEvent::class)fun on ...
- Java 进程的退出机制与Shutdown hook
基本概念 进程与线程:一个进程包含多个线程,一个进程中所有线程都退出后,该进程才会退出. 用户线程与守护线程:任一用户线程未退出,JVM进程不退出,当所有用户线程都退出时, 守护线程线程自动退出. S ...
- java8:关闭钩子shutdown hook
参考资料: <Java中的关闭钩子(shutdown hook)> <JVM 的关闭钩子> 写在开头:本文为学习后的总结,可能有不到位的地方,错误的地方,欢迎各位指正. 目录 ...
- JAVA虚拟机关闭钩子(Shutdown Hook)
Java程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.JAVA中的ShutdownHook提供了比较好的方案. JDK提供了Java ...
- layui.open 关闭之后触发_JAVA虚拟机关闭钩子(Shutdown Hook)
前言 当你认真的去看一个组件的源码的时候,你会经常看见这种关闭钩子的函数,如果你不了解的话,谷歌一下,你就会发现如下文章就是搜索引擎出来的第一篇,不愧是出自我们优秀的厮哒哒之笔. 正文 Java 程序 ...
- 高并发编程-Runtime.getRuntime().addShutdownHook为自己的应用添加hook
文章目录 概述 使用场景 注意事项 示例 概述 一句话概括就是: ShutdownHook允许开发人员在JVM关闭时执行相关的代码. 我们可以使用java.lang.Runtime.getRuntim ...
- GRPC: 如何优雅关闭进程(graceful shutdown)
简介: 本文将介绍优雅关闭 gRPC 微服务.在进程收到关闭信号时,我们需要关闭后台运行的逻辑,比如,MySQL 连接等等. 介绍 本文将介绍优雅关闭 gRPC 微服务. 什么是优雅关闭? 在进程收到 ...
最新文章
- struts2 实现多文件限制上传
- R语言与Tableau集成之可视化应用
- Linux Network Administrators Guide
- Java删除properties配置文件中指定键值的代码
- Ansible 七(ad hoc任务)
- HTML与CSS基础之选择器优先级(十)
- Java 中 List 分片的 5 种方法!
- 计算机和HMI设备通信之程序上下载
- Freemarker 的常见控制结构写法(ZT)
- 老李分享:5个衡量软件质量的标准
- mysql 4,mysql 4.1,mysql 数据库中文问题
- Mybatis 传参问题
- CvCreateImage函数说明
- 计算机专业论文推荐,计算机专业论文参考文献推荐
- PMP-强化练习题一(180题答案及解析)
- 超声波测距原理与实现
- nyoj-动态规划-234-吃土豆-201308131021
- oracle 客户端的安装失败,关于安装oracle 11g client 出现安装先决条件检查全部失败...
- 【Python】多文件夹图片重命名
- 致远OA管理员密码的重置
热门文章
- 微信第三方登录 -- (PC端+移动端)
- 有计算机信息高新技术考试合格证,待遇怎么样?
- [附源码]计算机毕业设计springboot电子相册管理系统
- 关于敏捷开发的一点总结与感悟
- 将命名空间导出到 NFS-GANESHA
- 你知道智能机柜与普通机柜有哪些区别吗
- 《华为机试》——MP3光标位置 及 洗牌
- 【免费软件】如何解决 Mac 移动硬盘不能写入
- 整理关于牛人们对图书管理系统领域建模的精彩讨论,以此希望大家学习下别人是如何思考的...
- [Windows Server 2012] 安装护卫神·主机管理系统