Raf*_*ter 5 java jvm bytecode java-bytecode-asm
该JVMS在第4.7.26规定的是:
ModulePackages属性指示Module属性导出或打开的模块的所有包,以及Module属性中记录的服务实现的所有包.ModulePackages属性还可以指示模块中既不导出也不打开也不包含服务实现的包.
何时在未导出或打开时添加此类包是否有意义?我看不出Java编译器是这样添加包的.
我偶然发现了这一点,因为ASM也提供了一种ModuleVisitor::visitPackage方法.
根据艾伦·贝特曼的评论回答我自己的问题:
该ModulePackages属性是优化且可选的。如果该属性存在,JVM 可以通过简单地读取该属性来获取模块包的列表。如果此属性不存在,则必须扫描涉及 I/O 的 jar 文件,因此这是不需要的。
如果包列表不完整,运行时将无法从这些包加载类,就好像这些包未包含在 jar 中一样。
该属性是由jar工具添加的,而不是由javac添加的。
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |