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. 深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  2. 怎样用ZBrush对模型进行渲染

    关于如何使用ZBrush®3D图形绘制软件雕刻僵尸模型,Fisker老师用了6个章节共41课时,从人体躯干和骨骼雕刻,到衣服.鞋子制作,再到顶点着色,向大家一一展示了雕刻过程,其中分享了很多ZBrus ...

  3. app端微信支付(二) - 生成预付单

    ​前一篇文章的时序图中说了,app端调用微信支付必须先由后台调用微信后台生成预付单,再构建参数给手机端,而数据的构建要以xml形式,那么看看代码具体实现吧,代码已经精简过了,自己的业务已经除去,精简的 ...

  4. 洛谷P2412 查单词 [trie树 RMQ]

    题目背景 滚粗了的HansBug在收拾旧英语书,然而他发现了什么奇妙的东西. 题目描述 udp2.T3如果遇到相同的字符串,输出后面的 蒟蒻HansBug在一本英语书里面找到了一个单词表,包含N个单词 ...

  5. 第10章 Java类的三大特性之一:多态

    1.Java中的多态 多态是指对象的多种形态,主要包括这两种: 1.1引用多态 a.父类的引用可以指向本类的对象b.父类的引用可以指向子类的对象举个例子:父类Anmail,子类Dog,可以使用父类An ...

  6. 将“早期版本的Windows”改名

    将“早期版本的Windows”改名,并修改系统等待时间 问题描述:       先装Windows XP,再装Windows 7,启动菜单会出现“早期版本的Windows”与“Windows 7”两个 ...

  7. win7 装了VB虚拟机 开始挺好用 后来突然就打不开了 提示如下错误:(如图)创建 COM 对象失败.

    创建 COM 对象失败. 应用程序将被中断. Start tag expected, '<' not found. Location: 'C:\Users\Mike/.VirtualBox\Vi ...

  8. Spark在Ubuntu中搭建开发环境

    一.在Windows7中安装Ubuntu双系统 工具/原料   windows7 64位 ubuntu 16.04 32位 UltraISO最新版(用来将镜像文件烤到U盘中) 空U盘(若有文件,请先备 ...

  9. requests 模块

    发送请求 使用Requests发送网络请求非常简单. 一开始要导入Requests模块: >>> import requests 然后,尝试获取某个网页.本例子中,我们来获取Gith ...

  10. 【SQL】Oracle分页查询的三种方法

    [SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 ? 1 2 3 4 5 6 7 8 9 10 11 [sql] select * from t_user t whe ...