对于开发人员,了解字节码可以更准确、直观地理解Java语言中更深层次的东西,比如通过字节码,可以很直观地看到Volatile关键字如何在字节码上生效。另外,字节码增强技术在Spring AOP、各种ORM框架、热部署中的应用屡见不鲜,深入理解其原理对于我们来说大有裨益。除此之外,由于JVM规范的存在,只要最终可以生成符合规范的字节...
字节码增强技术:AOP技术其实就是字节码增强技术,JVM提供的动态代理追根究底也是字节码增强技术。 目的:在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于对应用程序的二进制文件进行修改。Java字节码增强主要是为了减少冗余代码,提高性能等。 应用场景:某一天系统出现OOM,通过工具分析,是莫各类的对象占用了...
首先升级版本可能会存在数据不兼容或者服务端和客户端版本不兼容问题,甚至仅仅是重启也可能对依赖的业务方服务产生不小的抖动。所以要求我们提出不重启服务的热修复方案,这里就可以基于字节码增强技术来实现服务的热更新,实际上我们提供出去的Agent Jar帮助整个货拉拉数千个基础服务节点实现热更新,完美修复这个Bug。这里...
前文提到的2个修改字节码源数据的契机都会触发Tranceformer的tranceform()方法,入参bankTransBytes就是Class源数据,tranceform方法体里会通过字节码框架对源数据进行一系列修改,然后将修改后的字节码数据以返回值的形式交还给JVM。再次new新的Class实例时就会用修改后的Class字节码数据作为模板进行实例创建,从而达到增强的...
1、字节码增强技术概述: 字节码增强技术是指通过修改Java字节码文件而不是源代码,对现有的Java应用进行功能扩展和改进。它广泛应用于AOP(面向切面编程)、性能调优、日志跟踪、代码生成和动态代理等场景。字节码增强技术可以实现对程序行为的精细控制,且在运行时动态加载修改后的字节码,从而达到无侵入式编程的效果。
其实再我们的日常开发中,字节码增强组件的身影无处不在,例如spring-aop和mybatis。本着知其然也要知其所以然的精神,我决定沉下心来,对字节码增强技术做一个深入的学习和总结,本文作为该系列的开篇,主要是对字节码做一下简单的介绍,为我们后面的深入学习打下一个好的基础。
## 1. 字节码增强技术简介 在Java 开发中,字节码增强技术是一种非常重要的技术手段,它可以在代码运行前对字节码进行修改,从而实现增强功能、优化性能等目的。目前比较流行的两种字节码增强技术是 ASM 和 Javassist。下面我们将分别介绍它们的使用和应用。
Java 字节码是 Java 程序编译后生成的一种中间代码,它可以在 JVM 上执行。Java 字节码增强技术就是在编译过程中对这些字节码进行修改、优化或者增强的技术。通过对字节码进行增强,可以在不改变源代码的情况下实现许多功能,比如性能优化、代码检测、安全检测等。
通过一个平时经常需要用的业务日志记录来学习,平时业务日志操作记录基本都是通过 AOP 实现的,这次就使用字节码增强技术来进行实现,对业务代码基本无任何侵入。 首先定义一个业务 service public class BizService { public void bizProcess(Map map) { System.out.println("do biz process"); ...
字节码增强技术:AOP技术其实就是字节码增强技术,JVM提供的动态代理追根究底也是字节码增强技术。 目的:在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于对应用程序的二进制文件进行修改。Java字节码增强主要是为了减少冗余代码,提高性能等。 应用场景:某一天系统出现OOM,通过工具分析,是莫各类的对象占用了...