`
lemoncyb
  • 浏览: 51129 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

[转]jvm关闭钩子与信号处理

    博客分类:
  • java
 
阅读更多
对于使用Java做server端程序来说,通常会希望在JVM关闭时做些扫尾工作,比如写内存数据到磁盘、关闭句柄等。JVM提供了关闭钩子(shutdown hooks)来做这件事情。关闭钩子使用起来很简单,调用Runtime实例的public void addShutdownHook(Thread hook)即可,其中参数hook就是要做扫尾工作的钩子线程。这就是说,调用这个方法,JVM便会在初始化时注册这个钩子,待时机到了触发钩子。而触发的时机有:1)程序正常退出或者调用System.exit方法,如果是多线程环境,要求是最后一个非守护线程终止,2)JVM收到需要关闭自己的信号(比如SIGINT、SIGTERM等,但像SIGKILL,JVM就没有机会去处理了),也或者发生如系统关闭这种不可阻挡的事件。

对于addShutdownHook中的钩子代码,也是有一些要注意的地方,下面列举几点:
1、关闭钩子可以注册多个,在关闭JVM时就会起多个线程来运行钩子。通常来说,一个钩子就足够了,但如果需要启用多个钩子,就需要注意并发带来的问题。
2、钩子里也要注意对异常的处理,如果不幸抛出了异常,那么钩子的执行序列就会被终止。
3、在钩子运行期间,工作线程也在运行,需要考虑到工作线程是否会对钩子的执行带来影响,我最近发现的一个bug就是这种情况,场景是钩子要关闭文件句柄,但因为同时server还接收提交请求,结果文件又被打开,造成不想要的结果。
4、钩子里的代码尽可能简洁,否则当像系统关闭等情景可能钩子来不及运行完JVM就被退出了。

话题转到信号处理上,我们知道在linux下c服务端编程里,信号处理是必不可少的,它除了像JVM那样可以在程序退出前做些扫尾工作,还可以针对特定的信号做些实用的处理,比如自定义信号来重新加载文件等(当然这个功能使用一个线程轮询检查也是很方便的)。但不管怎么说,在Linux c中,你是可控信号的。但在Java,JVM掌管着信号处理,这使得程序端无法对信号做处理。这也可以理解,就像一些Server它本身对各种信号做了处理,如果你写个挂在它下面的扩展也对信号做处理,就可能出现冲突。不过,如果你真想在Java里做信号处理,也是有办法的,jdk里提供了相关可使用的接口,那就是sun.misc包下的Signal和SignalHandler。不过看名字就知道这个东西不靠谱,人家也强烈不建议你用。我测试的结果时,在eclipse里根本不能自动编译通过,使用javac编译会给出警告信息”sun.misc.Signal 是 Sun 的专用 API,可能会在未来版本中删除“。所以,就不要想在Java里做信号处理了,还是想想其他方法来解决问题吧。

附,关于JVM的关闭钩子及信号处理,http://www.ibm.com/developerworks/java/library/i-signalhandling/ 很值得一读。

=============================== 华丽的终止符 ================================

本文作者:kafka0102,转载文章请注明来源,谢谢!!
本文链接:http://www.kafka0102.com/2010/04/107.html
分享到:
评论

相关推荐

    揭秘Java虚拟机-JVM设计原理与实现

    《揭秘Java虚拟机-JVM设计原理与实现》这本书深入探讨了Java虚拟机(JVM)的工作原理及其在Java编程中的核心地位。Java虚拟机是Java平台的核心组成部分,它负责执行字节码,为开发者提供了跨平台的运行环境。以下是...

    涨见识!JVM性能监控与调优实战 一线大厂大牛讲师的JVM优化案例与解决方案课程

    JVM性能监控与调优实战课程,作为整篇课程的重中之重,非常值得同学们参考学习。课程前端讲解了JVM的性能监控和调优的概述,对调优的的方法和工具进行讲解学习,让同学们掌握方法,理解知识。课程的中间阶段我们进行...

    JVM高级特性与最佳实践(第2版)源代码.zip

    《JVM高级特性与最佳实践(第2版)》是一本深入探讨Java虚拟机(JVM)技术的书籍,其源代码提供了丰富的实践案例和示例,帮助读者更直观地理解JVM的工作原理和优化技巧。以下是根据书名和描述所涉及的一些关键知识点...

    JVM高级特性与最佳实践

    《JVM高级特性与最佳实践》一书涵盖了Java虚拟机(JVM)的深度解析以及在实际应用中的优化策略。JVM是Java程序运行的基础,它负责解释和执行字节码,提供内存管理、垃圾回收等核心功能。深入理解JVM的内部机制,对于...

    深入理解Java虚拟机JVM高级特性与最佳实践1

    《深入理解Java虚拟机JVM高级特性与最佳实践》是一本专注于Java开发人员提升技术水平的著作,由周志明撰写。这本书旨在填补Java技术体系中关于Java虚拟机(JVM)知识的空白,帮助读者深入理解JVM的工作原理及其对...

    实战JAVA虚拟机 JVM故障诊断与性能优化.pdf

    实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送) 实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送) 实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送)

    jvm高级特性与最佳实践

    5. 应用JVM提供的高级特性:例如,使用并发标记清除垃圾收集器(CMS)来处理延迟敏感的应用。 6. 分析线程使用情况:合理管理线程池大小,避免因线程争用造成的性能问题。 综上所述,了解和掌握JVM的高级特性与...

    JVM调优实战(转)

    非堆内存包括方法区(Method Area)和JVM为优化或内部处理所分配的内存。 在堆内存中,年轻代是用于存储短生命周期对象的区域,老年代是用于存储长生命周期对象的区域,而持久代是用于存储类的元数据和常量池的区域...

    (46页完整版)JVM体系结构与GC调优.zip

    46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT详解JVM,46页PPT...

    深入JVM内核—原理、诊断与优化

    《深入JVM内核—原理、诊断与优化》是一份深度探索Java虚拟机(JVM)的视频教程,旨在帮助开发者全面理解JVM的工作机制,掌握性能诊断技巧,并能进行有效的优化。本教程覆盖了从基础到高级的JVM主题,不仅适用于Java...

    实战JAVA虚拟机 JVM故障诊断与性能优化

    《实战JAVA虚拟机—JVM故障诊断与性能优化》是一本深入探讨Java虚拟机(JVM)技术的书籍,旨在帮助开发者和系统管理员诊断并优化JVM相关的性能问题。本书内容丰富,涵盖了大量的实践案例,使得即便是初学者也能理解...

    JVM规范与深入理解

    《JVM规范与深入理解》这个主题涵盖了Java虚拟机(Java Virtual Machine)的全面解析,旨在帮助开发者深入了解JVM的工作原理及其对程序性能的影响。在这个主题中,我们主要关注两个核心资源:周志明的《深入理解Java...

    jdk,jvm源码

    Java虚拟机(JVM)是Java程序运行的核心,它负责解释和执行字节码,为Java应用程序提供了一个跨平台的运行环境。JDK(Java Development Kit)包含了开发和运行Java程序所需的所有工具,包括JVM。当我们谈论"jdk,jvm...

    推荐一些JVM原理,JVM调优,JVM内存模型,JAVA并发 电子书1

    标题中提到了JVM原理、JVM调优、JVM内存模型和JAVA并发,这些都是Java虚拟机(JVM)相关的核心概念。JVM是运行Java字节码的虚拟计算机,为Java提供了一个跨平台的环境,确保Java程序可以在不同的操作系统上运行而...

    jvm特性与java特性

    Android最初使用Dalvik虚拟机来执行Android应用程序,虽然Dalvik与传统的JVM在设计上有所不同,但随着Android的发展,现在主流Android应用也是基于Java或Kotlin开发,并且在Android Runtime (ART)下运行,ART替代了...

    JVM详解与学习

    ### JVM详解与学习 #### Java相关 ##### 1.1 Java定义 Java 是一种广泛使用的高级编程语言,具有面向对象、跨平台等特性。它的设计理念是“一次编写,到处运行”,这得益于Java虚拟机(JVM)的存在。JVM使得Java...

    jvm高级特性与最佳实践第二版源代码

    9. **第11章:JVM异常处理与断言** - 描述JVM如何处理异常,包括异常的抛出、捕获和栈展开。同时,也会讨论断言在调试和测试中的应用。源代码可能包含异常处理和断言的实例。 10. **第13章:其他高级特性** - 可能...

    JVM与Hadoop介绍

    ### JVM与Hadoop介绍 #### 一、Java虚拟机(JVM)概述 Java虚拟机(JVM)是执行Java字节码...同时,Hadoop作为一种分布式计算框架,与JVM紧密相连,利用JVM的强大功能处理大规模数据集,是大数据处理领域的关键技术之一。

Global site tag (gtag.js) - Google Analytics