0%

Java-字节码操作

字节码操作


Java动态性的两种常见实现方式

  1. 字节码操作

  2. 反射

运行时操作字节码可以让我们实现如下功能

  1. 动态生成新的类
  2. 动态改变某个类的结构(添加/删除/修改 新的属性/方法)

优势

  1. 比反射开销小,性能高
  2. Javaasist性能高于反射,低于ASM

常见的字节码操作类库

  • BCEL

    Byte Code Engineering Library,这是Apache software Foundation的Jakarta项目的一部分,BCEL是Java classworking广泛使用的一种框架,它可以让你深入JVM汇编语言进行类操作的细节。BCEL与Javassist有不同的处理字节码的方法BCEL在实际的JVM指令层次上进行操作(BCEL拥有丰富的JVM指令级支持)而Javassist所强调的是源代码级别的工作。

  • ASM

    是一个轻量级java字节码操作框架,直接涉及到JVM底层的操作和指令

  • CGLIB(Code Generation Library)

    是一个强大的,高性能,高质量的Code生成类库,基于ASM实现。

  • Javassit

    是一个开源的分析、编辑和创建Java字节码的类库。性能较ASM差,和cglib差不多,但使用简单。很多开源框架都在使用它。

未完