nailcui/Nailcui.github.io

Java字节码、JVM-TI等

Opened this issue · 5 comments

相关知识:

各个框架依赖关系

image

ASM

资源:

史上最通俗易懂的ASM教程

ASM是一种通用Java字节码操作和分析框架
它可以用于修改现有的class文件或动态生成class文件
是其他框架的基础

ASM在指令层次上操作字节码的,和class字节码更加接近。
如果我们有些字节码操作的需求,ASM一定可以实现,只是使用起来比较麻烦一些;所以一般作为其他框架的基础

cglib

基于asm操作字节码
字节码生成、转换的高级API库
ASM使用类似SAX的解析器来实现高性能

主要功能

  • Enhancer: 生成类、接口的代理类;final类、方法除外
  • 运行时动态创建Bean
  • Bean操作:
    • BeanGenerator: JavaBean生成
    • BeanCopier
    • BulkBean
    • BeanMap
  • 生成接口: InterfaceMaker
  • 生成接口的实现类: KeyFactory
  • 将两个接口的两个实现类合并: Mixin
  • 实现类似Map的功能: StringSwitcher

Javassist

使用高级api进行字节码操作的库
不依赖 ASM,功能 ≈ ASM + cglib
Javassist是一个开源的分析、编辑和创建Java字节码的类库,可以直接编辑和生成Java生成的字节码。
相对于bcel, asm等这些工具,开发者不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成类。
javassist简单易用, 快速。

资源

Java动态字节技术之Javassist

功能

  • 接口的实现类生成
  • 现有类的修改
  • 类的生成

bytebuddy

基于asm操作字节码
生成、修改类;创建接口的实现类
高级api,无需理解字节码,简洁的代码风格

BCEL

BCEL(Byte Code Engineering Library)原本是Apache Jakarta的一个子项目,目前已成为Apache Commons的一个子项目,主要用于分析、创建、操纵Java class文件。

主要有3部分的功能

  • 字节码查看
  • 字节码生成、编辑
  • 其他工具