Java 虚拟机工具接口(JVMTI)提供了一个编程接口,允许你(程序员)创建software agent 来监视和控制你的Java应用。 JVMTI 代替了原来的Java Virtual Machine Profiling Interface(JVMPI)。

这里说一下JVMTI的应用,比如我们使用的Eclipse中的调试工具就是基于JDPA(包含了JVMTI)实现的。JDPA组成模块分为三个部分,最底层的JVMTI监控JVM,JDWP完成数据传输,JDI接收用户命令:(Java Platform Debugger Architecture, JVM Tool Interface, Java Debug Wire Protocol,Java Debug Interface)

一个Agent利用这些interface提供的功能,注册监听感兴趣的事件,当它们发生时收到通知,来查询和控制那些应用。JVMTI 的 文档在这里 here。一个JVMTI agent 对于debugging 和 程序调优 很有用。 它可以获取程序多方面的信息, 比如内存分配,CPU使用率和lock竞争。

官方强烈建议使用JVMTI,而不是JVMPI。 JVMTI在很多方面的功能性和效率相对于JVMPI都得到了提升。比如:

  1. JVMTI依赖于对每个事件的回调。这比JVMPI使用event structure并且需要编组和解编的设计更有效。
  2. JVMTI提供的功能是JVMPI的4倍(包括很多获取变量、域、方法、类信息的功能)。在 Function Index Page ,可以看到全部的JVMTI function。
  3. JVMTi提供了更多的不同类型事件的通知。 包括异常事件,域访问和修改事件,断点和单步调试事件。
  4. 一些JVMPI中的事件被降级,这些事件包括:JVMPI没有充分利用的 (比如 arena new and delete),或者 可以通过字节码增强更好实现的 ,或者JVMTI能更好完成的(比如堆转储和实例分配)。
  5. 对于相应的性能影响,JVMTI是基于容量(capabilitiy) 的,而JVMPI是 ”all or nothing“。
  6. JVMPI 的堆功能不具有伸缩性质(heap functionality did not scale  )
  7. JVMPI 没有返回错误信息
  8. JVMPI深入影响了VM的实现,导致了维护问题和性能影响
  9. JVMPI是实验性质的,将很快被终止。

参考文章:

Oracle 官方tutorial Creating a Debugging and Profiling Agent with JVMTI

IBM java技术文章 深入Java调试体系

使用JVMTI创建调试和监控代理的更多相关文章

  1. 线程池的介绍和使用,以及基于jvmti设计非入侵监控

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 五常大米好吃! 哈哈哈,是不你总买五常大米,其实五常和榆树是挨着的,榆树大米也好吃, ...

  2. Oracle监控代理安装ITM(IBM Tivoli Monitoring)

    1 监控代理安装 2 1.1 安装 2 1.1.1 解压安装包 2 1.1.2 安装 2 1.2 配置 5 1.2.1 给Agent授权 5 1.2.2 配置Oracle Agent 10 目录 1  ...

  3. zabbix监控代理zabbix-proxy

    新公司监控用的zabbix,其中用到了zabbix-proxy,原先没有尝试弄过,现在先提前安装看看,以便后续使用查阅. Zabbix-proxy 是一个监控代理服务器,它收集监控到的数据,先存放在缓 ...

  4. C#报错:创建调试信息文件 ……obj\Debug\model.pdb: 拒绝访问

    错误:创建调试信息文件“.......\obj\Debug\model.pdb”时发生错误 --“......\obj\Debug\model.pdb: 拒绝访问. 解决办法如下: 删除该项目下的 b ...

  5. Visual Studio2013创建、公布监控Windows Azure网站

    原文 Visual Studio2013创建.公布监控Windows Azure网站 随着Visual Studio 2013的发布,现在我们可以在Visual Studio内部实现Windows A ...

  6. Ionic2开发环境搭建、项目创建调试与Android应用的打包、优化

    Ionic2开发环境搭建.项目创建调试与Android应用的打包.优化. windows下ionic2开发环境配置步骤如下: 下载node.js环境,稳定版本:v6.9.5 下载android stu ...

  7. 04Spring_bean 后处理器(后处理Bean),BeanPostProcessor ,bean创建时序,动态代理

    这篇文章很重要,讲解的是动态代理,以及bean创建前后的所发生的事情.介绍一个接口:在Spring构造Bean对象过程中,有一个环节对Bean对象进行 后处理操作 (钩子函数) ----- Sprin ...

  8. VS中调试时监控线程的最后错误代码

    进行调试的时候,监控线程的最后错误代码是非常有用的. 在 Microsoft Visual studio 中,Microsoft 的调试程序支持一个非常有用的特性,即可以配置 Watch 窗口,以便始 ...

  9. 微信公众号本地断点调试(frp反向代理或Remote Debugger)

    问题描述: 需要开发微信授权和订阅推送,但是感觉调试不方便,就试着几种方式.因为是用的C#开发,Visual Studio工具自带配套的远程工具 (Remote Debugger).但是感觉不稳定,容 ...

随机推荐

  1. windows常用端口对应表

    端口概念 在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem.集线器.交换机.路由器用于连接其他网络设备的接口,如RJ-45端口.SC端口等等.二是逻辑意义 ...

  2. [No00006D]下载离线版的github for windows【以Github for Windows 3.0.110.为例】

    目录 先上地址后讲原理: 原理: 11个目录的文件怎么一口气下载呢? 最后,把下好的文件批量名,同时将GitHub.exe.manifest也放到软件根目录下(与GitHub.exe同级): 今后的猜 ...

  3. Andorid 反编译App

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23564065 开发的过程中,有时候可能会去使用别的app里面的图片,参考布局甚至 ...

  4. LinkedIn的即时消息:在一台机器上支持几十万条长连接

    最近我们介绍了LinkedIn的即时通信,最后提到了分型指标和读回复.为了实现这些功能,我们需要有办法通过长连接来把数据从服务器端推送到手机或网页客户端,而不是许多当代应用所采取的标准的请求-响应模式 ...

  5. EasyUI实现工地领款单项目

    环境搭建 引入jar.配置Spring MVC.web.xml.日志等 建表 自动生成MyBatis相关文件 mybatis-generator-core-1.3.2.jar <?xml ver ...

  6. ThinkPHP常用配置路径

    //系统常量定义 //去THinkPHP手册中进行查找 echo "<br>"."网站的根目录地址".__ROOT__." "; ...

  7. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 增加安全性增加内网的电脑才可以调用的限制

    大型业务应用系统很容易受到各种攻击,每加上一道防护就可以减少80%-90%的攻击.我们的核心接口组件里也做了一些限制,有些接口方法只有内网的用户才可以调用,防止外网的用户调用,这样安全性会有很大的提升 ...

  8. NOI2018准备Day12

    上午学了1个小时左右的指针,学了个从句子中分离单词的方法,其他的感觉没学到啥. 中午看了一会儿网络流,懵逼...... A了8道题,4道钻石.3道黄金.1道白银,自己写出了codevs"解药 ...

  9. TCP connect的错误返回值

    如果是TCP套接字,调用connect函数将激发TCP三次握手过程,而且仅在连接建立成功或出错时返回,其中错误返回可能有下面几种情况: (1)若TCP客户没有收到SYN分节的响应,则返回ETIMEDO ...

  10. animate支持的css属性

    支持下列CSS 样式 * backgroundPosition * borderWidth * borderBottomWidth * borderLeftWidth * borderRightWid ...