Java黑科技之源:JVMTI完全解读

  • JVMTI的定义及原理

    在介绍JVMTI之前,需要先了解下Java平台调试体系JPDA(Java PlatformDebugger Architecture)。它是Java虚拟机为调试和监控虚拟机专门提供的一套接口。如下图所示,JPDA被抽象为三层实现。其中JVMTI就是JVM对外暴露的接口。JDI是实现了JDWP通信协议的客户端,调试器通过它和JVM中被调试程序通信。

    JVMTI 本质上是在JVM内部的许多事件进行了埋点。通过这些埋点可以给外部提供当前上下文的一些信息。甚至可以接受外部的命令来改变下一步的动作。外部程序一般利用C/C++实现一个JVMTIAgent,在Agent里面注册一些JVM事件的回调。当事件发生时JVMTI调用这些回调方法。Agent可以在回调方法里面实现自己的逻辑。JVMTIAgent是以动态链接库的形式被虚拟机加载的。

    640?wx_fmt.png

  • JVMTI的历史

    JVMTI 的前身是JVMDI(Java Virtual Machine Profiler Interface) 和 JVMPI(Java Virtual Machine Debug Interface),它们原来分别被用于提供调试 Java 程序以及 Java 程序调节性能的功能。在 J2SE 5.0 之后 JDK 取代了JVMDI 和 JVMPI 这两套接口,JVMDI 在最新的 Java SE 6 中已经不提供支持,而 JVMPI 也计划在 Java SE 7 后被彻底取代。

  • JVMTI的功能

    JVMTI处于整个JPDA 体系的最底层,所有调试功能本质上都需要通过 JVMTI 来提供。从大的方面来说,JVMTI 提供了可用于 debug 和profiler 的接口;同时,在 Java 5/6 中,虚拟机接口也增加了监听(Monitoring),线程分析(Thread analysis)以及覆盖率分析(Coverage Analysis)等功能。从小的方面来说包含了虚拟机中线程、内存、堆、栈、类、方法、变量,事件、定时器处理等等诸多功能。具体可以参考oracle 的文档:https://docs.oracle.com/javase/1.5.0/docs/guide/jvmti/jvmti.html。通过这些接口,开发人员不仅可以调试在该虚拟机上运行的 Java 程序,还能查看它们运行的状态,设置回调函数,控制某些环境变量,从而优化程序性能。

  • 原文链接:https://blog.csdn.net/duqi_2009/article/details/94518203?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165277097916781432970800%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165277097916781432970800&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-12-94518203-null-null.nonecase&utm_term=%E7%A7%91%E6%8A%80

    © 版权声明
    THE END
    喜欢就支持一下吧
    点赞0 分享
    评论 抢沙发
    头像
    文明发言,共建和谐米科社区
    提交
    头像

    昵称

    取消
    昵称表情图片