前言
根据 Java
社区的一项提议,Java
将获得一个用于处理 Java 类文件的API
。
目的
该Classfile API
提案的草案显示,该提案旨在提供一个用于解析、生成和转换Java
类文件的API
,最初将作为 JDK
中ASM
的内部替代品,之后再作为公共API
开放。根据计划,ASM
最终将被完全从JDK
中删除。
详细内容
Classfile API
提案内容指出:类文件生成、解析和检测在Java
生态系统中无处不在;许多工具和库需要能够处理类文件,并且框架通常会执行on-the-fly bytecode instrumentation
、transformation
和 generation
。JDK
应该为读取、写入和转换Java
类文件提供准确、完整、最新、高性能的API
。
该API
的设计目标和原则是让所有类文件实体(例如方法和字段)由不可变对象表示,由用户驱动的导航也是一个目标。
激发对Java
类文件库的调用的因素包括:
- JDK 整合。
JDK
本身在处理类文件方面很重要。JDK
使用ASM
存在固有的延迟。 - 框架和运行 JDK 之间的版本偏差。 处理类文件的应用程序和框架通常捆绑一个类文件库,例如
ASM
。但是由于新的类文件功能可以出现在任何JDK
版本中,应用程序和框架更频繁地遇到比它们捆绑的库更新的类文件,从而导致运行时错误。开发人员需要一个与运行JDK
保持同步的类文件库。 - JVM 进化。 与
Java
早期相比,JVM
和类文件格式现在的发展速度要快得多。虽然有些演变很简单,但有些演变更复杂,例如 Project Valhalla 带来了新的字节码、字段描述符和验证规则。在某些时候,改进现有库以支持这些新功能可能会代价很大或很复杂。 - 语言改进。 自从编写
ASM
以来,该语言已经有了很大的改进。
计划要求最初将ASM
替换为JDK
的运行时依赖项,而不会造成不可接受的性能损失。另一个目标是替换编译器和 JDK
工具使用的内部类读取器库。最终,一系列框架和应用程序应该能够使用该库作为 ASM、cglib
和其他字节码库的替代品。
更多信息,请参考:www.infoworld.com/article/366…