java - 将未导出/未打开的包添加到模块信息的 ModulePackages 的用例是什么?

标签 java jvm bytecode java-bytecode-asm

JVMS states in section 4.7.26那:

The ModulePackages attribute indicates all the packages of a module that are exported or opened by the Module attribute, as well as all the packages of the service implementations recorded in the Module attribute. The ModulePackages attribute may also indicate packages in the module that are neither exported nor opened nor contain service implementations.

在没有导出或打开的情况下添加这样的包什么时候才有意义?我看不到 Java 编译器曾经以这种方式添加包。

我偶然发现了这一点,因为 ASM 也是 offers a ModuleVisitor::visitPackage method .

最佳答案

根据 Alan Bateman 的评论回答我自己的问题:

ModulePackages 属性是一个优化和可选的。如果该属性存在,JVM 可以通过简单地读取该属性来获取模块包的列表。如果此属性不存在,则必须扫描涉及 I/O 的 jar 文件,因此不需要。

如果包列表不完整,运行时将无法从这些包中加载类,就好像这些包不包含在 jar 中一样。

该属性由 jar 工具添加,而不是由 javac 添加。

关于java - 将未导出/未打开的包添加到模块信息的 ModulePackages 的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51532510/

相关文章:

java - Spock:我怎样才能得到失败测试的上下文?

java - 使用Tomcat和servlet时如何删除txt文件?

Java 当前时间比我的系统时间早 2 小时

java - 将 JVM/JRE 设置为自动使用 Windows 代理

java - 如果抛出异常,Spring 的 JdbcTemplate 是否关闭连接?

java - 推断我的垃圾收集日志

java - 是什么保证从另一个类的静态 block 调用静态方法按预期工作?

vb6 - Visual Basic 6 字节码规范

java - 字节码与 native 代码相比有什么优势?

java - 我将如何解析 Java 类文件常量池?