01 - 初识Java ASM

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对将会让大家掌握一项更灵活的技术,希望对大家能有所帮助。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容