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. jquery——移动端滚动条插件iScroll.js

    官网:http://cubiq.org/iscroll-5 demo: 滚动刷新:http://cubiq.org/dropbox/iscroll4/examples/pull-to-refresh/ ...

  2. MySql 存储过程、触发器和权限问题

    存储过程 1.1 什么是存储过程 存储过程,带有逻辑的sql语句 之前的sql没有条件判断,没有循环 存储过程带上流程控制语句(if  while) 1.2 存储过程特点 1)执行效率非常快!存储过程 ...

  3. python文件调用

    如果列表T是a.py中是全局的,则直接调用即可,例如 #a.py T = [1,2,3,4]   #b.py import a def test():     for i in a.T:        ...

  4. Win10 VC++6 无法启动此程序,因为计算机中丢失mfc42d.dll 需要提升

    亲测可用 1.无法启动此程序,因为计算机中丢失mfc42d.dll 我也遇到了这个问题,并且顺利解决了!按一下流程搞定的: “工程-设置-常规-microsoft基础类,(选择使用MFC作为静态链接库 ...

  5. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 主管可以看下属的数据

    主管可以看下属的数据,这个是经常用到的一个权限,不管是大公司,还是小公司都需要的功能. 通过以下2个方法,可以任意达到想要的效果了,设置简单灵活,还能递归运算下属,有时候简单好用就是硬道理. #reg ...

  6. Vue2.0学习笔记一 :各种表达式

    #,过滤器 #,在Vue2.x中,过滤器只能在mustache绑定中使用,为了在指令帮定中实现同样的行为,你应该使用计算属性:     #,过滤器可以串联 {{ message | filterA | ...

  7. Spring+EhCache缓存实例

    一.ehcahe的介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider.Ehcache是一种广泛使用的开源Java分布式 ...

  8. linux-ntpdate同步更新时间

    Linux服务器运行久时,系统时间就会存在一定的误差,一般情况下可以使用date命令进行时间设置,但在做数据库集群分片等操作时对多台机器的时间差是有要求的,此时就需要使用ntpdate进行时间同步 安 ...

  9. UI: 标题栏

    TitleBarDemo.xaml <Page x:Class="Windows10.UI.TitleBarDemo" xmlns="http://schemas. ...

  10. 软媒魔方 v6.2.1.0 绿色纯净版及经典版

    软媒魔方,最好用的 Windows 系统增强软件!从最早的优化大师发展为一款系统超级增强套装,自动化.智能化解决各种电脑问题.软媒魔方,全新一代Windows系统增强辅助工具,智能+专业双操控模式,系 ...