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

背景描述

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

代码示例

f54bcc128f39843ab7edc044ee154813.png

pom.xml

 org.javassist javassist 3.22.0-GA

MyAgent.java

ee4baa3a19b4a8b4c32dd4031336dd4b.png

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("/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java jpg结构_Java Class 字节码文件结构分析----附带逐字节码分析图

欢迎访问我的博客,同步更新: 枫山别院 今天给大家分享下Java Class字节码文件的结构解析。(文末附有详细大图)代码首先我们创建一个Java类,然后添加一些成员变量和方法,如下:public class Test {String name "hello";int size 10…

泊松分布的分布函数_《可靠性设计》——常用的概率分布

超几何分布:在总数为N、不合格品率为p的一批产品中随机抽取n个样品,且样品中r个不合格品的概率为则称x服从超几何分布。 当N很大时,上式计算相当烦琐,此时可以用二项分布或泊松分布来近似。二项分布:二项分布又称为Ber…

java jvm性能调优_《Java 底层原理》Jvm性能调优

前言Java 的性能调优,主要就是为了防止出现out of memory(oom)。Java出现oom就会直接导致程序停止运行。调优模拟元空间oom的情况importnet.sf.cglib.proxy.Enhancer;importnet.sf.cglib.proxy.MethodInterceptor;importnet.sf.cglib.proxy.MethodProxy;importjava.…

yota3墨水屏设置_汉阳环卫工节前给道路隔音屏“洗澡”

楚天都市报9月27日讯(记者卢成汉 通讯员肖赟 肖利)据了解,三环线汉阳段连接硚口区和经济技术开发区,是货运主通道和入城环路,墨水湖北路二环线延长线高架是二环线汉阳中心城区与三环线的重要连接道,都属“城市快速路”&#xff0c…

java atd_Java字符串String详解

1、String字符串实例化String对象:(1)直接赋值,如:String str"hello";(2)使用关键字 new,如:String strnew String("hello");由图可知:使用 new 的方式在堆内存中开辟了两个空间&#…

while用法_语法宝典:连词while的四种用法,你都学会了吗?

你可能知道while除了表示“当……的时候”,还有它与when, as的用法区别,但是这些还不够全面,今天小编就来给大家详细解析一下相关的用法,一起来看看吧!一、考查表示时间的用法,其意为“当……的时候”。如&…

java基础语法试题_java基础语法测试题

java基础语法测试题 Java 程序设计:07-07考试时间:90 分钟用户:wanggang 难度:0 总分:100导出时间:2011-07-07 13:06:15一、判断题(每题 2 分,总分 20 分)1.( )接口和类一样也可以有继承关系,而…

开发转测试没人要_新人如何快速的进入融入软件测试行业?

古人云“师傅领进门,修行在各人”任何行业的入门门槛都是不一样的,软件测试行业涉及到专业领域的知识,入门的门槛高吗?怎么更好的融入行业呢?首先要说到的是软件测试学习的途径主要就三种,一种自学&#xf…

winform checkbox要点击两次_这个Winform的UI库也太全了!四十多个控件都在这一个项目里了...

之前 Gitee 为大家介绍过几款优质的 Winform 项目:这几个WinForm项目,让你更熟悉 .NET|Gitee 项目推荐,发现Winform在大家心中的地位还是挺高的,那么今天就再给各位分享一款新鲜出炉的 Winform UI库——SunnyUI&#x…

java面向对象结课总结_java面向对象课程总结

前言:从大一下学期接触java面向对象课程,到现在java面向对象课程也是告了一段落,到这一阶段我也学了java的大部分的知识,基本的我大概已经懂了,但是在学习java面向对象这个课程中也积累了很多学习java的经验&#xff0…

苹果ppt_你的PPT太low了,学学苹果吧

人在职场哪能不会PPT,可是辛苦做好的PPT总要换来一句:“好low啊,能不能高大上一点?学学人家苹果员工的工作汇报或者发布会PPT吧!”这个时候你心里肯定要吐槽一句:“天!我要是PPT能做成苹果风&am…

webservice 服务器无法处理请求_Message Queue与WebService比较

最近在使用IBM Websphere Message Queue,与WebService相比,同样是跨平台的通信方式,那么各种有什么优势呢?Message Queue属于比较重量级的应用,在规范化的企业流程中用的比较多。如果企业有很多部门,部门都有自己的系统…

小程序 字号设置 slider滚动改变大小_SteerMouse for mac(鼠标设置工具) v5.4.3

Steermouse Mac版这是一款Mac鼠标设置工具,不论你的Mac OS鼠标是Magic Mouse这样的额蓝牙鼠标还是我们常用的USB鼠标你都可以轻松设置。steermouse mac版软件介绍SteerMouse是一个实用程序,可让您自由地自定义按钮,滚轮和光标速度。无论鼠标是…

JAVA不同类型数组重载_方法的重载;数组 (Java Day05)

一,方法的重载概念:在一个类中,拥有多个方法名相同,参数列表不同的方法的现象叫做方法的重载特征:​ 1、在同一个类中​ 2、方法名相同​ 3、参数列表不同参数列表的不同&#xff1a…

佳博网络打印机改ip工具_换IP软件为什么是网络工作者首选工具?

科技的不断发展也在促使着网络技术的进步,而网络对于我们日常工作生活来说是不可或缺的,太多事情都需要在网络中完成,对于互联网从业者深知其重要性,常常会因为项目的不同需要切换不同的IP地址来进行工作,一般情况下我…

玩ts要注意什么_番禺三维创意拍摄要注意什么

番禺三维创意拍摄要注意什么 广州思卓传媒有限公司(简称思卓传媒)成立于互联网,视频迅速崛起的21世纪,前身为思卓影视工作室,近十年积累了丰富品牌策划制作,以专注,精益求精的匠人精神为追求,致力于产生专业…

java c 客户端_java基于C/S模式实现聊天程序(客户端)

经过这几天对java的学习,用java做了这个计算机网络的课程设计,基于C/S模式的简单聊天程序,此篇文章介绍一些客户端的一些东西。先讲一讲此聊天程序的基本原理,客户端发送消息至服务器,服务器收到消息之后将其转发给连接…

4接口引脚定义_浅谈USB Type-C接口

笔者前段时间做了一款STM32下载器,为了与新时代接轨,在设计电路板的时候首次使用了USBType-C接口,后来发现其确实很好用。就在今天又设计制作了一款USB-hub,在硬件上我又使用了Type-C接口,所以来了兴致,写一…

rocket mq 监听端口_浅谈业务流程中的mq使用方式

假设有个场景:下单成功需要给用户发送消息通知,发送消息通知通过mq实现事务提交前发送mq消息step1:start transactionstep2:生成订单step3:投递消息到mqstep4:commit transaction问题:step3发生…

jsp工程防止外部注入_XPATH注入详解|OWASP Top 10安全风险实践(五)

本文为一些列连载文章之一,不定期更新,计划目录如下:OWASP介绍SQL注入命令注入XML外部实体注入XPATH注入反射式、DOM及存储XSS失效的身份认证和会话管理不安全的直接对象引用安全配置错误敏感信息泄露功能级访问控制缺失跨站请求伪造服务端请…