ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。Java class 被存储在严格格式定义的 .class 文件里,这些类文件拥有足够的元数据来解析类中的所有元素:类名称、方法、属性以及 Java 字节码(指令)。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。

ASM 能够通过改造既有类,直接生成需要的代码。增强的代码是硬编码在新生成的类文件内部的,没有反射带来性能上的付出。同时,ASM 与 Proxy 编程不同,不需要为增强代码而新定义一个接口,生成的代码可以覆盖原来的类,或者是原始类的子类。它是一个普通的 Java 类而不是 proxy 类,甚至可以在应用程序的类框架中拥有自己的位置,派生自己的子类。

相比于其他流行的 Java 字节码操纵工具,ASM 更小更快。ASM 具有类似于 BCEL 或者 SERP 的功能,而只有 33k 大小,而后者分别有 350k 和 150k。同时,同样类转换的负载,如果 ASM 是 60% 的话,BCEL 需要 700%,而 SERP 需要 1100% 或者更多。

©著作权归作者所有:来自51CTO博客作者mb607558ea4fef1的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 【DB笔试面试494】Oracle中哪个包用于生成随机值?
  2. 记录一次宕机后,OGG出现故障,OGG-01705的解决方法
  3. 【DB笔试面试223】在Oracle中,如果丢失一个数据文件而且没有备份,
  4. 【DB笔试面试536】在Oracle中,Oracle 10g和11g告警日志文件的位置
  5. 【DB笔试面试497】Oracle使用哪个包可以生成并传递数据库告警信
  6. 【DB笔试面试844】在Oracle中,tnsnames.ora文件的作用是什么?
  7. 【DB笔试面试850】在Oracle中,造成错误“ORA-12547: TNS:lost con
  8. 【DB笔试面试356】在Oracle数据库中,丢失归档的情况下数据文件如
  9. 【DB笔试面试249】在Oracle中,生成备库控制文件的方法有哪些?

随机推荐

  1. Android(安卓)UI开发第二十五篇――分享
  2. TextView常用属性
  3. 《Android攻防实战》读书笔记——Android
  4. Android(安卓)Toast使用简介
  5. android中的数据库操作
  6. android新闻App源码、仿微信源码、地图音
  7. Ice Cream Sandwich系统将统一Android版
  8. (window)Android Studio安装以及Fetching
  9. android当中的xml没有代码提示功能解决办
  10. Android:TextView属性