zoukankan      html  css  js  c++  java
  • Javassist/ASM 框架比较

    Javassist:

    1. Javassist (Java编程助手)使操作Java字节码变得简单。它是一个用于编辑Java字节码的类库;跟其他类似的字节码编辑器不同的是,它使Java程序能够在运行时定义一个新类,并在JVM加载类文件时修改它。
    2. Javassist提供了两种级别的API:源级别和字节码级别。如果用户使用源代码级API,他们可以不需要了解Java字节码的规范的前提下编辑类文件。整个API仅使用Java语言的词汇表设计。甚至你可以以源文本的形式插入字节码中;Javassist动态编译它。另一方面,字节码级API允许用户作为编辑器直接编辑类文件。
    3. Javassist允许您检查、编辑和创建Java二进制类。
    4. Javassist并不是唯一处理字节码的库,但它有一个特别功能,使其成为一个重要的开始来尝试字节码工作:你可以使用Javassist改变一个Java类的字节码而不需要学习任何关于字节码或Java虚拟机(JVM)的体系结构。
    5. 面向切面编程:Javassist可以是一个很好的工具用于向类中添加新方法,以及在调用方和被调用方两边插入before/after/around通知。
    6. 反射:Javassist另一个应用就是运行时反射;Javassist允许Java程序使用一个元对象,该元对象控制基级别对象上的方法调用。不需要专门的编译器或虚拟机。
    7. Javassist还提供了用于直接编辑类文件的低级API。要使用此级别的API,您需要详细了解Java字节码和类文件格式,而此级别的API允许您对类文件进行任何类型的修改。

    ASM

    1. ASM是一个通用的Java字节码操作和分析框架。它可以直接以二进制形式修改现有类或动态生成类。提供了通用的转换和分析算法,允许轻松地组装定制的复杂转换和代码分析工具。
    2. ASM提供了与其他字节码框架类似的功能,但它关注的是使用的简单性和性能。因为它的设计和实现尽可能的小和快,所以它非常适合在动态系统中使用。
    3. ASM是一个Java类操作工具,用于动态生成和操作Java类,这是实现可适应系统的有用技术。ASM基于一种新的方法,与现有的相似工具相比,后者包括使用“访问者”设计模式,而不显式地用对象表示被访问的树。对于大多数实际需求,这种新方法比现有的工具提供了更好的性能。

    Javassist & ASM 对比

    1. Javassist源代码级API比ASM中实际的字节码操作更容易使用
    2. Javassist在复杂的字节码级操作上提供了更高级别的抽象层。Javassist源代码级API只需要很少的字节码知识,甚至不需要任何实际字节码知识,因此实现起来更容易、更快。
    3. Javassist使用反射机制,这使得它比运行时使用Classworking技术的ASM慢。
    4. 总的来说ASM比Javassist快得多,并且提供了更好的性能。Javassist使用Java源代码的简化版本,然后将其编译成字节码。这使得Javassist非常容易使用,但是它也将字节码的使用限制在Javassist源代码的限制之内。
    5. 总之,如果有人需要更简单的方法来动态操作或创建Java类,那么应该使用Javassist API 。如果需要注重性能地方,应该使用ASM库。

    类构造时间

    FrameworkFirst timeLater times
    Javassist 257 5.2
    ASM 62.4 1.1

    表结果表明ASM确实比其他框架更快,这一优势既适用于启动时间,也适用于重复使用。



    链接:https://www.jianshu.com/p/f2a4c7d3745d

  • 相关阅读:
    pycharm快捷键
    Java线程的生命周期
    Java中的管程
    Java并发编程之入门
    Linux系统监控命令
    RT-Thread 搜集一些其他博主的博客以备学习
    late_initcall 替换 module_init
    去掉行尾的^M
    ST3 C程序自动补全
    MinGW-W64 编译 LLVM 与 Clang
  • 原文地址:https://www.cnblogs.com/xd502djj/p/13062165.html
Copyright © 2011-2022 走看看