Java字节码、JVM-TI等
Opened this issue · 5 comments
nailcui commented
nailcui commented
ASM
资源:
ASM是一种通用Java字节码操作和分析框架
它可以用于修改现有的class文件或动态生成class文件
是其他框架的基础
ASM在指令层次上操作字节码的,和class字节码更加接近。
如果我们有些字节码操作的需求,ASM一定可以实现,只是使用起来比较麻烦一些;所以一般作为其他框架的基础
nailcui commented
cglib
基于asm操作字节码
字节码生成、转换的高级API库
ASM使用类似SAX的解析器来实现高性能
主要功能
- Enhancer: 生成类、接口的代理类;final类、方法除外
- 运行时动态创建Bean
- Bean操作:
- BeanGenerator: JavaBean生成
- BeanCopier
- BulkBean
- BeanMap
- 生成接口: InterfaceMaker
- 生成接口的实现类: KeyFactory
- 将两个接口的两个实现类合并: Mixin
- 实现类似Map的功能: StringSwitcher
nailcui commented
Javassist
使用高级api进行字节码操作的库
不依赖 ASM,功能 ≈ ASM + cglib
Javassist是一个开源的分析、编辑和创建Java字节码的类库,可以直接编辑和生成Java生成的字节码。
相对于bcel, asm等这些工具,开发者不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成类。
javassist简单易用, 快速。
资源
功能
- 接口的实现类生成
- 现有类的修改
- 类的生成
nailcui commented
bytebuddy
基于asm操作字节码
生成、修改类;创建接口的实现类
高级api,无需理解字节码,简洁的代码风格
nailcui commented
BCEL
BCEL(Byte Code Engineering Library)原本是Apache Jakarta的一个子项目,目前已成为Apache Commons的一个子项目,主要用于分析、创建、操纵Java class文件。
主要有3部分的功能
- 字节码查看
- 字节码生成、编辑
- 其他工具