
2025最新-字节码-代码生成
文章平均质量分 84
可免费问问题,可以一次订阅,终身免费问问题。本专栏主要讲解ASM框架,字节码解析,CGLB等相关的字节码操作
优惠券已抵扣
余额抵扣
还需支付
¥39.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
九师兄
可免费问问题,可以一次订阅,终身免费问问题。工作多年遇到的问题,与一些总结,注意事项等,有些是源码级别的讲解,同时整个博客是成体系的,里面有很多连接互相连接,问题都是拆开的,能让大家遇到问题的时候方便的解决问题,或者提供思路。也可以单独找我解决问题。
展开
-
【java】使用javaparser格式化Java源文件
当前内容主要为本人学习和使用javaparser格式化当前的java源文件,实现像eclipse的format功能基本pom依赖。原创 2023-09-24 15:30:42 · 359 阅读 · 0 评论 -
【字节码】字节码生成各种技术生成速度
本章节主要是介绍 字节码生成各种技术生成速度,所有代码生成技术中,我们推荐使用Byte Buddy,因为Byte Buddy代码生成可的性能最高,Byte Buddy 的主要侧重点在于生成更快速的代码,如下图:原创 2023-07-30 10:10:49 · 192 阅读 · 0 评论 -
【字节码】Java Agent 实现方法时间统计、arthas的trace命令分析
团队中有同事在做性能优化相关的工作,因为公司基础设施不足,同事在代码中写了大量的代码统计某个方法的耗时,大概的代码形式就是这样的代码非常多,侵入性很大,联想到之前学习的Java Agent技术,可以无侵入式地解决这类问题,所以做了一个很小很小的demo。转载 2023-06-04 09:48:44 · 1217 阅读 · 0 评论 -
【字节码】javassist 官网翻译 第3章节
【字节码】javassist 官网翻译 第二章节本章节接着上一章节继续翻译。九师兄出品。原创 2023-05-17 21:14:36 · 229 阅读 · 0 评论 -
【字节码】javassist 官网翻译 第二章节
【字节码】javassist 官网翻译 第1章节本章节接着上一章节继续翻译。九师兄出品。原创 2023-05-15 20:23:02 · 233 阅读 · 0 评论 -
【字节码】javassist 官网翻译 第1章节
要从头定义一个新类,必须在ClassPool上调用makeClass()。这个程序定义了一个不包含成员的类Point。Point的成员方法可以通过在CtNewMethod中声明的工厂方法创建,并通过在CtClass中使用addMethod()添加到Point。makeClass()不能创建新接口;ClassPool中的makeInterface()所能做的。可以使用CtNewMethod中的abstractMethod()创建接口中的成员方法。注意,接口方法是一个抽象方法。新类可以定义为现有类的副本。原创 2023-05-13 12:34:22 · 245 阅读 · 0 评论 -
【字节码】Javassist如何表示类变量
【javassist】使用javassist修改kafka源码AbstractCoordinator类一度让我陷入误区。如何在方法中表示类变量呢?下面是要修改的方法比如,this.coordinator要在字节码中表示,开始我参考【javassist】javassist 入门案例 生成类因为方法参数都是用$1这样表示的,但是我犯难了,这里是类变量,我以为要先获取类属性,常量池之类的,然后再替换这里的属性,后来发现不是,可以直接使用。这里记录一下犯蠢的过程。原创 2023-05-11 21:24:02 · 236 阅读 · 0 评论 -
【javassist】CannotCompileException: [source error] boolean expr is required
【javassist】使用javassist修改kafka源码AbstractCoordinator类这里原本有一个布尔类型的变量,根据文档【javassist】javassist 入门案例 生成类这里要用$1表示的,但是我这里怎么写都不对。如下使用if (!$1)是不对的。原创 2023-04-23 19:23:19 · 601 阅读 · 1 评论 -
【javassist】javassist.CannotCompileException: [source error] no such class
【javassist】使用javassist修改kafka源码AbstractCoordinator类原始的方法如下,中间的try catch是我加的。// 九师兄 if(this . coordinator!= null) {try {throw new IllegalArgumentException("消费组死掉");log . error("消费组死掉异常栈:" , e);原创 2023-04-21 20:26:35 · 993 阅读 · 0 评论 -
【字节码】字节码操作 ASM 组成部分
1. ASM的两个组成部分从组成结构.上来说, ASM分成两部分,- -部分为Core API,另一部分为Tree API。●其中,Core API包括asm.jar、asm-util,jar和asm-commons.jar ;●其中,Tree API包括asm-tree.jar和asm- analysis.jar。从两者的关系来说, Core API是基础,而Tree API是在Core API的这个基础上构建起来的。从ASM API演进的历史来讲,先有Core API ,后有Tree A.原创 2022-05-19 21:08:15 · 251 阅读 · 0 评论 -
【字节码】基于JavaAgent的全链路监控六 基于jvmti定位java异常信 息
上一篇文章:【字节码】基于JavaAgent的全链路监控六 开发应用级监控本章节转载:基于JavaAgent的全链路监控六《开发应用级监控》JVMTI(JVM Tool Interface)位于最底层,是Java虚拟机所提供的native编程接口。JVMTI可以提供性能分析、debug、内存管理、线程分析等功能。JPDA 定义了一个完整独立的体系,它由三个相对独立的层次共同组成,而且规定了它们三者之间的交互方式,或者说定义了它们通信的接口。这三个层次由低到高分别是 ,以及 。这三个模块把调试过程分解成几个很转载 2023-01-14 12:30:04 · 629 阅读 · 0 评论 -
【字节码】基于JavaAgent的全链路监控六 开发应用级监控
在我们的监控程序中,需要对各种模块进行监控;servlet、rpc、http、jdbc、redis、logic等,那么我们在设计监控程序时就需要对监控的程序进行模块化开发,可以在需要的时候进行组装配置即可,以方便我们监控程序的扩展和可控制性。这一章节我们把监控模块剥离,采用工厂模式进行调用{目前是静态工厂在我们实际使用中可以把工厂做成动态配置化}。转载 2023-01-14 12:29:37 · 413 阅读 · 0 评论 -
【字节码】基于JavaAgent的全链路监控五- ThreadLocal链路追踪
Google开源的Dapper链路追踪组件,并在2010年发表了论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,这篇文章是业内实现链路追踪的标杆和理论基础,具有非常大的参考价值。目前,链路追踪组件有Google的Dapper,Twitter 的Zipkin,以及阿里的Eagleeye (鹰眼)等,它们都是非常优秀的链路追踪开源组件。本文主要讲述如何在Spring Cloud Sleuth中集成Zipkin。转载 2023-01-14 12:29:01 · 963 阅读 · 1 评论 -
【字节码】基于JavaAgent的全链路监控四-JVM内存与GC信息
除了监控java方法的执行耗时,我们还需要获取应用实例的jvm内存与gc信息,以实时把控我们的服务器性能是否在安全范围。监控jvm内存与gc信息是非常重要的,尤其是在大促以及微博火热爆点的时候,我们需要根据监控信息进行扩容,以保证系统稳定。转载 2023-01-14 12:28:34 · 471 阅读 · 0 评论 -
【字节码】JavaAgent ByteBuddy操作监控方法 字节码
在第二章中我们已经可以监控方法执行耗时,虽然它能完成我们一些基本需要,但是为了增强代码的扩展性,我们需要使用字节码操作工具ByteBuddy来帮助我们实现更完善的监控程序。转载 2023-01-14 12:27:57 · 352 阅读 · 0 评论 -
【字节码】Byte-buddy 使用委托实现抽象类方法并注入自定义 注解信息
模拟网关类注解模拟网关方法注解这部分你可以创建任何类型的注解,主要是用于模拟类和方法上分别添加注解并获取最终属性值的效果。转载 2023-01-14 12:27:29 · 400 阅读 · 0 评论 -
【字节码】JavaAgent的全链路监控篇二,通过字节码增加监控执行 耗时
通过上一章节的介绍,我们已经知道通过配置-javaagent:文件.jar后,在java程序启动时候会执行premain方法。接下来我们使用javassist字节码增强的方式,来监控方法程序的执行耗时Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码JBoss应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态"AOP"框架。转载 2023-01-14 12:26:59 · 404 阅读 · 0 评论 -
【字节码】javaagent 入门 案例 最简单的案例
开发者通过这种机制(Instrumentation)可以在加载class文件之前修改方法的字节码(此时字节码尚未加入JVM),动态更改类方法实现AOP,提供监控服务如;开始搞这个,前一个星期搞了很久,都没搞通,主要是开始就直接很复杂的,导致一直没通,这个案例来个最简单的。然后点击运行我们的主类,打印结果如下,可以看到我们的javaagent生效了。然后我们先运行一下我们的这个主类。然后我们设置运行参数,参数内容如下。我们的MyAgent类设置如下。打包后,我们多了一个jar包。下面设置maven如下。原创 2023-01-14 12:25:50 · 363 阅读 · 0 评论 -
【字节码】Byte-buddy 监控方法执行耗时动态获取出入参类型 和值
在这一章节的实现过程来看,只要知道相关API就可以很方便的解决我们的监控方法信息的诉求,他所处理的方式非常易于使用。而在本章节中也要学会几个关键知识点;委托、方法注解、返回值注解以及入参注解。当我们学会了监控的核心功能,在后续与 Javaagent 结合使用时就可以很容易扩展进去,而不是看到了陌生的代码。对于这一部分非入侵的入侵链路监控,也是目前比较热门的话题和需要探索的解决方案,就像最近阿里云也举办了类似的编程挑战赛。首届云原生编程挑战赛1:实现一个分布式统计和过滤的链路追踪。转载 2023-01-06 23:45:00 · 592 阅读 · 0 评论 -
【字节码】基于Byte Buddy语法创建的第一个 HelloWorld
为了可以更加清晰的看到每一步对字节码编程后,所创建出来的方法样子(clazz),我们需要输出字节码生成 clazz。在Byte buddy中默认提供了一个 dynamicType.saveIn() 方法,我们暂时先不使用,而是通过字节码进行保存。System . out . println("准备写出文件:" + filepath);}在本章节 Byte buddy 中,需要掌握几个关键信息;创建方法、定义属性、拦截委托、输出字节码,以及最终的运行。转载 2023-01-06 23:45:00 · 295 阅读 · 0 评论 -
【字节码】Javassist 使用Bytecode指令码生成含有自定义注 解的类和方法
/ 类、注解 CtClass ctClass = pool . get(AnnotationDemo . class . getName());// 通过集合获取自定义注解 Object [ ] clazzAnnotations = ctClass . getAnnotations();ctClass.getAnnotations() ,可以获取所有的注解,进行操作。转载 2023-01-04 09:15:03 · 314 阅读 · 1 评论 -
【字节码】Javassist 通过字节码插桩监控方法采集运行时入参 出参和异常信息
基于 Javassist 字节码操作框架可以非常方便的去进行字节码增强,也不需要考虑纯字节码编程下的指令码控制。但如果考虑性能以及更加细致的改变,还是需要使用到 ASM。这里包括一些字节码操作的知识点,如下;,可以输出方法描述信息。其实就是方法的出入参和返回值。$1 $2 ...用于获取不同位置的参数。$$可以获取全部入参,但是不太适合用在数值传递中。获取方法的入参需要判断方法的类型,静态类型的方法还包含了 this 参数。addCatch最开始执行就包裹原有方法内的内容,最后执行就包括所有内容。转载 2023-01-06 23:45:00 · 551 阅读 · 0 评论 -
【字节码】使用Javassist在运行时重新加载类「替换 原方法输出不一样的结果」 实时加载类
关于热加载修改类的操作,在实际场景中还是蛮多的,但一般都是比较苛刻的场景诉求。在平时开发中还是比较少遇到的,并且CRUD开发不会遇到。Javassist 对 ASM 这样的字节码操作封装起来提供的 API 确实很好操作,在一些场景下也不需要考虑 JVM 中局部变量和操作数栈。但如果需要更高的性能,可以考虑使用 ASM。原创 2023-01-05 23:45:00 · 790 阅读 · 0 评论 -
【字节码】javassist 定义属性以及创建方法时多种入参和出参 类型的使用
仅供学习。在上一篇 Helloworld 中,我们初步尝试使用了 Javassist 字节编程的方式,来创建我们的方法体并通过反射调用运行了结果。大致了解到创建在使用字节码编程的时候基本离不开三个核心类;,它们分别管理着对象容器、类和方法。但是我们还少用一样就是字段;CtFields ,在这一章节中我们不止会使用字段,还会创建多个不同入参类型和返回值的学习。voidType$0 是 this好!那么我们就开始对这些知识点进行应用,创建出类和对应的方法。原创 2023-01-05 23:45:00 · 485 阅读 · 1 评论 -
【字节码】基于javassist的第一个案例helloworld
关于 Javassist 的使用在完整的且强大的 API 下,确实还是蛮容易使用的。并且代码的使用上并不是很难理解。后续会陆续推出字节码编程的案例文章,逐步完善这部分技术知识栈的内容。最终尝试使用这样的技术知识完成一个案例级别的质量检测系统。也欢迎喜欢此类内容的小伙伴跟进学习。原创 2023-01-04 23:30:00 · 253 阅读 · 0 评论 -
【字节码】Java Instrumentation 简介 以及 ASM 组合案例
JDK从1.5版本开始引人了java.lang.instrument 包,开发者可以更方便的实现字节码增强。其核心功能由提供,这个接口的方法提供了注册类文件转换器、获取所有已加载的类等功能,允许我们在对已加载和未加载的类进行修改,实现AOP、性能监控等功能。Instrumentation接口的常用方法如下所示。它的addTransformer方法给Instrumentation注册一个类型为ClassFileTransformer的类文件转换器。原创 2022-12-14 20:33:47 · 648 阅读 · 1 评论 -
【javassist】javassist 入门案例 生成类
前面介绍的ASM入门门槛还是挺高的,需要跟底层的字节码指令打交道,优点是小巧、性能好。Javassist是一个性能比ASM稍差但使用起来简单很多的字节码操作库,不需要使用者掌握字节码指令,由东京工业大学的数学和计算机科学系的教授Shigeru Chiba开发。本节将分为两个部分来讲解,第一部分是Javassist 核心API介绍,第二部分是Javassist操作class文件的代码示例。原创 2022-12-10 12:00:00 · 679 阅读 · 0 评论 -
【ASM】字节码操作 工具类与常用类 SerialVersionUIDAdder 介绍
感谢您抽出在上一篇文章:【ASM】字节码操作 工具类与常用类 如何合并两个类文件 StaticInitMerger 类介绍 我们学会了如何合并2个类文件。在本章节我们将学习SerialVersionUIDAdder。SerialVersionUIDAdder类的特点是可以为Class文件添加-一个 serialVersionUID字段。当SerialVersionUIDAdder计算serialVersionUID的时候,他有一套自己的计算方式,对于算法本身就不进行介绍了。那么serialVersionU原创 2022-12-08 23:45:00 · 365 阅读 · 1 评论 -
【ASM】字节码操作 工具类与常用类 如何合并两个类文件 StaticInitMerger 类介绍
视频:Java ASM系列:(089)StaticInitMerger类示例StaticInitMerger类的特点是,可以实现将多个方法合并到一起。首先,什么是合井两个类文件?假如有两个类。一个是 类,另一个是类,我们想将类里面定义的字段( fields )和方法( methods )全部放到类里面,这样就是将两个类合并成一个新的类。其次,合井两个类文件,有哪些应用场景呢?假如是来自于第三方的软件产品,但是,我们可能会发现它的功能有些不足,所以想对这个类进行扩展。第一种情况,如果扩展的功能比较简单,那么可原创 2022-12-05 23:45:00 · 537 阅读 · 1 评论 -
【ASM】字节码操作 工具类与常用类 ClassRemapper 介绍 类映射 代码混淆
【ASM】字节码操作 工具类与常用类 InstructionAdapter 介绍我们知道了,对于InstructionAdapter 类来说,它的特点是“添加了许多与opcode同名的方法”,更接近”原汁原味”的JVM Instruction Set。本章节我们主要学习介绍。ClassRemapper类的特点是,可以实现从"一个类"向“另一个类”的映射。借助于这个类,我们可以将class文件进行简单的混淆处理第一点,ClassRemapper类的特点是,可以实现从“一个类”向“另一个类”的映射。原创 2022-11-29 23:45:00 · 455 阅读 · 0 评论 -
【ASM】字节码操作 工具类与常用类 InstructionAdapter 介绍
【ASM】字节码操作 工具类与常用类 AnalyzerAdapter 工作原理我们学习了AnalyzerAdapter类的工作原理,以及实际案例来演示。在本章节我们主要学习InstructionAdapter类。对于类来说,它的特点是“添加了许多与opcode同名的方法”,更接近”原汁原味”的本文对InstructionAdapter类进行了介绍,内容总结如下:第一点,类的特点就是引入了一 些与opcode有关的新方法,这些新方法本质上还是调用来实现的。第二点,如果已经熟悉。原创 2022-11-27 23:45:00 · 319 阅读 · 0 评论 -
【ASM】字节码操作 工具类与常用类 AnalyzerAdapter 工作原理
在上一篇文章:【ASM】字节码操作 工具类与常用类 AnalyzerAdapter初步介绍我们知道 AnalyzerAdapter 主要用来操作Frame的。然后大概知道了怎么回事。本章节我们主要学习AnalyzerAdapter 工作原理。本文对AnalyzerAdapter 类进行介绍,内容总结如下:第一点,了解AnalyzerAdapter美的各个不同部分。第二点,理解AnalyzerAdapter类的代码原理,它是围绕看local variables和operand stack如何变化来展开的。原创 2022-11-26 23:45:00 · 386 阅读 · 0 评论 -
【ASM】字节码操作 工具类与常用类 AnalyzerAdapter初步介绍
【ASM】字节码操作 工具类与常用类 LocalVariablesSorter 源码介绍以及原理介绍我们看了LocalVariablesSorter的源码以及相关原理。本章节我们主要来学习AnalyzerAdapter。对于AnalyzerAdapter类来说,它的特点是“可以模拟frame的变化”,或者说“可以模拟local variables和operand stack的变化”。/****/原创 2022-11-24 23:45:00 · 299 阅读 · 0 评论 -
【ASM】字节码操作 工具类与常用类 LocalVariablesSorter 源码介绍以及原理介绍
【ASM】字节码操作 工具类与常用类 LocalVariablesSorter 类 简单介绍与使用我们主要介绍了LocalVariablesSorter类的使用,在本章节中我们将介绍这个LocalVariablesSorter类的源码。Java ASM系列:(079)LocalVariablesSorter类Java ASM系列:(080)LocalVariablesSorter类的工作原理本章节主要介绍LocalVariablesSorter类的使用。继承体系如下。原创 2022-11-22 23:45:00 · 353 阅读 · 1 评论 -
【ASM】字节码操作 工具类与常用类 LocalVariablesSorter 类 简单介绍与使用
【ASM】字节码操作 工具类与常用类 GeneratorAdapter 介绍我们知道了对于GeneratorAdapter 类来说,它非常重要的一个特点:将一些visitXxx()方法封装成一些常用的方法。本章节主要介绍LocalVariablesSorter类的使用。继承体系如下对于 LocalVariablesSorter 类来说。他的特点是可以引入新的局部变量,并且能对局部变量进行排序。原创 2022-11-20 18:42:58 · 886 阅读 · 0 评论 -
【ASM】字节码操作 工具类与常用类 GeneratorAdapter 介绍
【ASM】字节码操作 工具类与常用类 AdviceAdapter 介绍 打印方法进入 和 方法退出 的参数我们学会了,如果在方法进入和方法退出的时候打印方法的参数。现在我们 将要学习GeneratorAdapter类的使用。注意继承关系如下对于GeneratorAdapter 类来说,它非常重要的一个特点:将一些visitXxx()方法封装成一些常用的方法第一点,| GeneratorAdapter类的特点是将一些visixxx()方法封装成一些常用的方法。原创 2022-11-19 23:45:00 · 708 阅读 · 0 评论 -
【ASM】字节码操作 工具类与常用类 AdviceAdapter 介绍 打印方法进入 和 方法退出 的参数
【ASM】字节码操作 工具类与常用类 Printer、ASMifier、Textifier 介绍我们简单的介绍了 Printer、ASMifier、Textifier 三个类的使用方法。以及部分原理。下面我们将要学习的简介以及使用方法。対于AdviceAdapter类来説,能多很容易的实現在方法迸入”和"方法退出”肘添加代码。AdviceAdapter 类的特点:引入了onMethodEnter() 方法和onMethodExit()方法。原创 2022-11-18 23:45:00 · 807 阅读 · 1 评论 -
【ASM】字节码操作 工具类与常用类 Printer、ASMifier、Textifier 介绍
【ASM】字节码操作 工具类与常用类 TraceClassVisitor 介绍我们知道了如何使用TraceClassVisitor 打印ASM语句。在本节中我们将介绍在上一篇文章中出现的几个类,进行介绍 Printer、ASMifier、Textifier 等。原创 2022-11-18 23:00:00 · 1005 阅读 · 0 评论 -
【ASM】字节码操作 工具类与常用类 TraceClassVisitor 介绍
在上一篇文章:【ASM】字节码操作 工具类与常用类 CheckClassAdapter 介绍 我们可以使用CheckClassAdapter对生成的Class文件进行检测,但是检测的功能是有限的。因此需要我们自己也要仔细。第一个部分,TraceClassVisitor 类继承自ClassVisitor 类,而且有final 修饰因此不会存在子类。2.2 字段信息第二个部分,TraceClassVisitor 美定义的字段有哪些。TraceClassVisitor 类有两个重要的字段,一个是PrintWr原创 2022-11-18 22:00:00 · 883 阅读 · 0 评论 -
【ASM】字节码操作 工具类与常用类 CheckClassAdapter 介绍
【ASM】字节码操作 工具类与常用类 asm-utils 与 asm-commons我们讲解了 字节码操作的工具类与常用类中的asm-utils 与 asm-commons两个包的关系与区别。总体大概,大家应该明白了,这里讲解的是CheckClassAdapter 这个类。检查方法调用是不是遵循一定的顺序。原创 2022-11-15 12:35:57 · 674 阅读 · 0 评论