背景描述

javaagent是在JDK5之后提供的新特性,也可以叫java代理。开发者通过这种机制(Instrumentation)可以在加载class文件之前修改方法的字节码(此时字节码尚未加入JVM),动态更改类方法实现AOP,提供监控服务如;方法调用时长、可用率、内存等。

开发简述

通过实现ClassFileTransformer接口方法,动态更改方法的字节码。在方法前后加上时间戳,最后执行完成输出执行时长。

环境准备

1、IntelliJ IDEA Community Edition 2018.3.1 x64

2、jdk1.8 64位

配置信息(路径相关修改为自己的)

1、java调试时配置

2.1、配置位置:Run/Debug Configurations ->VM options

2.2、配置内容(编译后的jar放到根目录下):-javaagent:E:itstack-demo-javaagent-1.0-SNAPSHOT.jar=agentargs

代码示例

pom.xml

 org.javassist javassist 3.22.0-GA

MyAgent.java

MyTransformer.java

public class MyTransformer implements ClassFileTransformer { private final static String prefix = "long startTime = System.currentTimeMillis();"; private final static String postfix = "long endTime = System.currentTimeMillis();"; // 被处理的方法列表 private final static Map> methodMap = new HashMap>(); public MyTransformer() { //对指定方法监控 add("org.itstack.demo.test.AgentTest.queryUserAge"); add("org.itstack.demo.test.AgentTest.queryUserName"); } private void add(String methodString) { String className = methodString.substring(0, methodString.lastIndexOf(".")); String methodName = methodString.substring(methodString.lastIndexOf(".") + 1); List list = methodMap.get(className); if (list == null) { list = new ArrayList(); methodMap.put(className, list); } list.add(methodName); } @Override public byte[] transform(ClassLoader loader, String className, Class> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { className = className.replace("/

千寻位置 开发demo_java程序开发,使用javaagent无侵入代码方式,监控方法执行耗时...相关推荐

  1. java swing开发窗体程序开发(三)事件(Mouse,Foucs,Key,Window)

    接着刚刚的事件讲 补充一点:事件的触发前提,添加了这个监听器的组件必须是处于激活状态的才可行 (一)MouseEvent事件 该事件的触发是由鼠标的动作引起的,引起的情况可以是下面5种,按下鼠标,释放 ...

  2. java swing开发窗体程序开发(一)GUI编程

    Java SWing就是java提供的一个类库专门用于开发窗体程序的,相对于C#的winform,java swing的开发要比C#更加麻烦,他不像C#拥有可视化的界面编辑工具 而是需要像QT一样纯代 ...

  3. 用什么服务器开发小程序,开发小程序用什么服务器系统

    开发小程序用什么服务器系统 内容精选 换一换 按照翻译方式的不同,高级语言通常可以分为两类:一类是编译翻译,一类是解释翻译,分别对应着编译型语言和解释型语言.编译型语言典型的如C.C++语言,都属于编 ...

  4. 微信小程序开发—小程序开发入门

    我参加CSDN博客之星评选啦,感谢大家前往投票支持! 投票地址:http://blog.csdn.net/vote/list.html?keyword=anda0109#search 本篇将为大家详细 ...

  5. 名义初品微商系统开发,小程序开发

    名义初品微商分销系统开发尤经理,名义初品社群app系统开发,名义初品社群模式开发.名义初品社群系统开发.昵称不重要看简介. 新零售改变了线下传统零售格局,曾经在乡镇市场个体电器店是主流电器渠道,现在苏 ...

  6. java swing开发窗体程序开发(四)MVC结构

    MVC是一种设计结构(非设计模式,非设计原则) M:Model 模型层:即用于存储数据的对象 V:View 视图层:即用于为模型提供数据显示的对象 C:Controller 控制器层:即处理用户的业务 ...

  7. 求职兼职招聘类APP开发小程序开发的一些创新功能

    企业的发展需要人才,求职者也是需要施展才华的平台,为实现两者之间更好的沟通交流需求,类似智能招聘APP软件这些平台就出现在现在移动互联网时代中.智能招聘APP开发可以更好地促进就业信息需求畅通,为就业 ...

  8. android开发 停止运行程序,开发的时候老是报错 XXXXX程序已停止运行。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package com.example.event3; import android.support.v7.app.ActionBarActivity; ...

  9. 千寻位置 开发demo_「千寻新姿势」如何接入千寻位置高精度位置服务

    摘要:千寻位置自成立以来,便一直通过自身技术实力,为广大企业和行业提供多种接入方式,确保能为其带来优质的高精度服务. 提到高精度定位服务,可能对大多数人都会比较抽象.什么是高精度定位服务,我又该如何集 ...

最新文章

  1. 怎么获取html的某个元素,MSHTML怎么获取一个网页元素对象
  2. pandas使用to_sql方法将dataframe注册为数据库表进行数据整合和数据清洗并不对比SQL操作和dataframe操作
  3. protobuf的编译
  4. 前端npm install失败
  5. RAN adjusts schedule for 2nd wave of 5G specifications
  6. mysql5.7.20 sql mode_MySQL5.7中的sql_mode默认值带来的坑及解决方法
  7. 模糊逻辑学习--模糊逻辑的基础
  8. QTP不识别树结构中的点击事件
  9. java修改文件后缀_java批量修改文件后缀的方法介绍
  10. 如何判断BIOS设置是否开启CPU虚拟化功能?
  11. 魔众视频管理系统 v3.4.0 常规优化 系统界面升级
  12. Python eval()和exec()函数详解
  13. echoServer回显服务器
  14. 解决freeswitch30s就挂掉的问题
  15. 莫纳什大学计算机工程,莫纳什大学计算机系统工程专业本科.pdf
  16. 六、线性方程组求解--Jacobi和Gauss-Seidel迭代求解
  17. 图像分类,一文入魂(上)
  18. 双十一销量预测_双十一历年销售额盘点 2020年双十一销售额预测
  19. 苦战金三银四:580道最全面的BATJ大厂Java面试真题分享
  20. 中国“神舟八号”飞船在酒泉发射升空

热门文章

  1. MYSQL--浅析索引
  2. 分层结构,协议,接口,服务
  3. Leetcode--424. 替换后的最长重复字符
  4. 损失函数_SRGAN损失函数(目标函数)详解
  5. golang 升级到新版本_Scikit-learn新版本发布,一行代码秒升级
  6. 计算机网络画出发送窗口变化,2010年7月计算机网络原理试题及答案
  7. ssm如何支持热部署_Pipedrive如何在每天部署50+次的情况下支持质量发布?
  8. ipynb文件转为python(.py)文件
  9. QT学习笔记(十一):QString类
  10. 动态规划——数塔问题