天天看點

Java位元組碼—ASM

前言

  • ASM 是什麼
    1. 官方介紹:ASM is an all purpose Java bytecode manipulation and analysis framework. It can be used to modify existing classes or dynamically generate classes, directly in binary form.
    2. ASM是一個多用途的Java位元組碼操作和分析架構。它可以被用來修改現有類或動态生成的類,直接以二進制形式
    3. ASM 應該是 Assembly縮寫(官方沒有縮寫介紹,個人了解)

哪些著名的架構使用了ASM

  • Languages and AOP tools: AspectWerkz | AspectJ | BeanShell | CGLIB | dynaop | Clojure | Groovy
  • Java ME: EclipseME | MicroEmulator Sun Java ME emulation for Java SE |
  • Tools and frameworks: Fractal | Dr. Garbage | Proactive | Retrotranslator | RIFE | R-OSGi | Terracotta
  • Persistence: EasyBeans | Ebean | JDBCPersistence | JPOX | OpenEJB | Oracle BerkleyDB
  • Monitoring: BEA WebLogic | BTrace | Byteman | JiP | ByCounter | Limpid Log
  • Testing and code analysis: Agitar | Cobertura | Eclipse | JCarder | SemmleCode | Structure101 | SonarJ

ASM特點

  1. 短小精悍、快速、健壯
  2. 具有很好的文檔,并且還有eclipse\Idea插件
  3. 開源

ASM Core架構

ClassVisit接口實作

ClassReader實作

ClassWriter實作

例子1:類生成

jvm的指令行介紹

javap -verbose 檢視類資訊
    javap -c 檢視bytecode
           

使用 ASM 實作 Java 語言的“多重繼承”

http://www.ibm.com/developerworks/cn/java/j-lo-asm/

插件ByteCode Outline使用介紹

轉載于:https://www.cnblogs.com/oldtrafford/p/6736675.html