美文网首页
01 - 初识Java ASM

01 - 初识Java ASM

作者: 舍是境界 | 来源:发表于2022-01-07 06:42 被阅读0次

    ASM是什么

    简单来说,ASM是一个Java字节码的类库。

    问题一:ASM的操作对象是什么?

    ASM所操作的对象是字节码(ByteCode)数据。

    一个.java文件经过Java编译器(javac)编译之后会生成一个.class文件,在.class文件中,存储的是字节码(ByteCode)数据,ASM所操作的对象是字节码,而在许多情况下,字节码的具体形式是.class文件。

    java类文件编译

    问题二:ASM是如何处理字节码数据的?

    ASM处理字节码数据的思路是:

    1. 第一步将.class文件拆分成多部分;
    2. 对某一个部分的信息进行修改;
    3. 将多个部分重新组织成一个新的.class文件

    ASM provides a simple API for decomposing, modifying, and recomposing binary java classes(i.e ByteCode).

    ASM的版本发展

    • Java语言在不断发展,ASM版本也要不断发展来跟上Java的发展
    • 在选择ASM版本时,需注意它支持的Java版本,来确保兼容性

    版本对应关系表:

    ASM Release Release Date Java Support
    2.0 2005-05-17 Java 5 language support
    3.2 2009-06-11 support for the invokedynamic code
    4.0 2011-10-29 Java 7 language support
    5.0 2014-03-16 Java 8 language support
    6.0 2017-09-23 Java 9 language support
    6.1 2018-03-11 Java 10 language support
    7.0 2018-10-27 Java 11 language support
    7.1 2019-03-03 Java 13 language support
    8.0 2020-03-03 Java 14 language support
    9.0 2020-09-22 Java 16 language support
    9.0 2021-02-06 Java 17 language support
    9.2 2021-06-26 Java 18 language support

    ASM能做什么

    • 类文件分析(Analysis)
    • 动态生成新的类文件(Generation),这是一个从“无”到“有”,从0到1生成类文件的操作。
    • 对已有的类文件进行转换,从而生成新的类文件(Transformation)
    ASM能做什么

    ASM使用场景

    小结

    1. ASM所处理对象是字节码数据,也可以直观的理解成.class文件,不是.java文件。
    2. ASM能够对字节码数据进行哪些操作呢?回答:analyze、generate、transform。
    3. ASM可以形象的理解为“Java语言世界”的边缘上一扇大门,通过这扇大门,可以帮助我们进入到“字节码的世界”。

    本文带大家了解了ASM是什么,以及ASM能做什么,学会使用ASM对将会让大家掌握一项更灵活的技术,希望对大家能有所帮助。

    相关文章

      网友评论

          本文标题:01 - 初识Java ASM

          本文链接:https://www.haomeiwen.com/subject/bgbpeltx.html