<b>基于JVMTI实现Java线程的监控</b>[Java编程]
本文“<b>基于JVMTI实现Java线程的监控</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
随着多核 CPU 的日益遍及,越来越多的 Java 利用程序利用多线程并行计算来充分施展整个系统的性能.多线程的利用也给利用程序开辟人员带来了宏大的挑衅,不精确地利用多线程大概造成线程死锁或资源竞争,招致系统瘫痪.因此,需求一种运行时线程监控工具来帮忙开辟人员诊断和跟踪 Java 线程状况的切换.JDK 1.5 及后来续版本供应了监控虚拟机运行状况的接口 JVMTI.
JVMTI 工具接口
随着多核 CPU 技术的发展,多线程编程技术被遍及地利用,从而充分施展整个系统的性能.Java 语言对多线程编程供应了语言级的支持,可以便利地成立、运行、销毁线程.但是,多线程的利用也给利用程序开辟人员带来了宏大的挑衅,不精确地利用多线程大概造成线程死锁或资源竞争,招致系统瘫痪.
为了帮忙 Java 开辟人员诊断和跟踪 Java 线程状况的切换,Sun 公司在 Java 开辟工具包(Java2 Software Development Kit, JDK)1.5.0 版本中引进了 Java 虚拟机工具接口(Java Virtual Machine Toolkit Interface,JVMTI),用于替换在先前的 JDK 版本中作为试验功效存在的 Java 虚拟机解析接口(Java Virtual Machine Profiling Interface,JVMPI)和 Java 虚拟机调试接口(Java Virtual Machine Debugging Interface,JVMDI).通过 JVMTI 接口可以成立代理程序(Agent)以监督和掌握 Java 利用程序,包含解析、调试、监控、解析线程等等,其架构模子如图 1 所示.
图 1. JVMTI 架构模子
Agent 可以向运行中的虚拟机实例定阅感爱好的事件,当这些事件发生的时刻,会以事件回调函数的方法激活代理程序,同时 JVMTI 供应了众多的功效函数,以查询和掌握 Java 利用程序的运行状况.Agent 通过 JVMTI 所供应的接口与虚拟机举行通信,并同步监控虚拟机的运行状况,它与运行中的 Java 利用程序是相对独立的,不会干扰程序的正常运行.Agent 可以用任何支持 C 语言尺度的本地语言来编写,并以动态链接库的方法存在;Java 程序启动的时刻可以加载这个动态链接库.
基于 JVMTI 接口构建的 Agent 可以便利地实现对 Java 线程状况切换的跟踪,从而使开辟人员可以在运行时清楚地理解多线程利用程序中线程的工作情形,便利举行调试和除错.本文后续部份将介绍若何基于 JVMTI 接口构建 Java 线程切换监控代理.
Java 线程模子
要对 Java 线程的切换举行监控,必须先理解 JVM 中的 Java 线程模子.Java 线程模子可以用图 2 所示的 Java 线程生命周期来描写.Java 线程的生命周期包含成立,就绪,运行,阻塞,死亡 5 个状况.一个 Java 线程老是处于这 5 个生命周期状况之一,并在一定条件下可以在差别状况之间举行转换 .
图 2. Java 线程模子
成立状况 (New Thread)
在 Java 语言中利用 new 操作符成立一个线程后,该线程仅仅是一个空对象,它具有了线程的一些特点,但此时系统没有为其分配资源,这时的线程处于成立状况.
就绪状况 (Runnable)
利用 start() 办法启动一个线程后,系统为该线程分配了除 CPU 外的所需资源,使该线程处于就绪状况.此外,假如某个线程履行了 yield() 办法,那么该线程会被暂时剥夺 CPU 资源,重新进入就绪状况.
以上是“<b>基于JVMTI实现Java线程的监控</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |