深化Java调试体系,第2部份: JVMTI和Agent实现[Java编程]
本文“深化Java调试体系,第2部份: JVMTI和Agent实现[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
JPDA(Java Platform Debugger Architecture)是 Java 平台调试体系构造的缩写.通过 JPDA 供应的 API,开辟人员可以便利机动的搭建 Java 调试利用程序. JPDA 主要由三个部份构成:Java 虚拟机工具接口(JVMTI)、Java 调试线协议(JDWP),以及 Java 调试接口(JDI).本系列将会具体介绍这三个模块的内部细节,并通过实例为读者揭开 JPDA 的面纱.
本系列的 第 1 部份 从整体上介绍 JPDA 的各个构成,以及它们彼此之间的内涵关联.本文是该系列的第 2 篇,将会侧重介绍强盛的虚拟机接口 - JVMTI,以及若何利用 JVMTI 编写用户自定义的 Java 调试和诊断程序.
Java 程序的诊断和调试
开辟人员对 Java 程序的诊断和调试有很多差别种类、差别层次的需求,这就使得开辟人员需求利用差别的工具来办理问题.比方,在 Java 程序运行的历程中,程序员但愿掌握它总体的运行情况,这个时刻程序员可以直接利用 JDK 供应的 jconsole 程序.假如但愿提高程序的履行效率,开辟人员可以利用各种 Java Profiler.这种范例的工具非常多,各有长处,可以帮忙开辟人员找到程序的瓶颈,从而提高程序的运行速度.开辟人员还会碰到一些与内存相关的问题,比方内存占用过量,大量内存不能得到释放,乃至招致内存溢出错误(OutOfMemoryError)等等,这时可以把当前的内存输出到 Dump 文件,再利用堆解析器大概 Dump 文件解析器等工具举行研究,查看当前运行态堆(Heap)中存在的实例整体情况来诊断问题.全部这些工具都有一个共同的特点,就是终究他们都需求通过和虚拟机举行交互,来发现 Java 程序运行的问题.
已有的这些工具固然强盛易用,但是在一些高级的利用环境中,开辟者常常会有一些特别的需求,这个时刻就需求定制工具来达成目标. JDK 本身定义了目标明确并功效完善的 API 来与虚拟机直接交互,并且这些 API 能很便利的举行扩大,从而满意开辟者各式的需求.在本文中,将对比具体地介绍 JVMTI,以及若何利用 JVMTI 编写一个定制的 Agent .
|
JVMTI 的简介
JVMTI(JVM Tool Interface)是 Java 虚拟机所供应的 native 编程接口,是 JVMPI(Java Virtual Machine Profiler Interface)和 JVMDI(Java Virtual Machine Debug Interface)的更新版本.从这个 API 的发展历史轨迹中我们便可以知道,JVMTI 供应了可用于 debug 和 profiler 的接口;同时,在 Java 5/6 中,虚拟机接口也增添了监听(Monitoring),线程解析(Thread analysis)以及覆盖率解析(Coverage Analysis)等功效.恰是由于 JVMTI 的强盛功效,它是实现 Java 调试器,以及别的 Java 运行态测试与解析工具的底子.
JVMTI 并不一定在全部的 Java 虚拟机上都有实现,差别的虚拟机的实现也不尽相同.不过在一些主流的虚拟机中,比方 Sun 和 IBM,以及一些开源的如 Apache Harmony DRLVM 中,都供应了尺度 JVMTI 实现.
JVMTI 是一套本地代码接口,因此利用 JVMTI 需求我们与 C/C++ 以及 JNI 打交道.事实上,开辟时普通采取成立一个 Agent 的方法来利用 JVMTI,它利用 JVMTI 函数,设置一些回调函数,并从 Java 虚拟机中得到当前的运行态信息,并作出自己的判断,最后还大概操作虚拟机的运行态.把 Agent 编译成一个动态链接库之后,我们便可以在 Java 程序启动的时刻来加载它(启动加载情势),也可以在 Java 5 之后利用运行时加载(活动加载情势).
-agentlib:agent-lib-name=options
-agentpath:path-to-agent=options
Agent 的工作历程
启动
Agent 是在 Java 虚拟机启动之时加载的,这个加载处于虚拟机初始化的早期,在这个时间点上:
全部的 Java 类都未被初始化;
全部的对象实例都未被成立;
因而,没有任何 Java 代码被履行;
但在这个时刻,我们已经可以:
操作 JVMTI 的 Capability 参数;
以上是“深化Java调试体系,第2部份: JVMTI和Agent实现[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |