栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Javac在不同平台上创建二进制相同的类文件?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Javac在不同平台上创建二进制相同的类文件?

您无法执行。关于生成的类文件,有几个未指定的详细信息,例如某些源代码表达式的字节码必须如何看起来准确,或者成员或属性的顺序。

由于不需要每次运行都生成完全相同的文件,因此编译器实现甚至不会尝试。可以公平地假设,当您使用完全相同的输入(不仅是相同的源代码,而且是相同的选项)执行相同的软件时,它会产生相同的输出,但这不仅需要相同的编译器版本,而且同样是JRE。

不幸的是,即使使用相同的实现和输入,也 可能 会有不同的行为。例如,

java.util.HashMap
在某些Java
7实现中,尝试进行随机化,如果
javac
将某些工件存储在中,也就不足为奇了
HashMap
。这不适用于Java 8,但可能适用于Java
9中引入的不可变映射。编译器是否将使用该功能是不可预测的。

因此,如果您发现一个可重复生成完全相同的字节码的特定jdk版本,则现在可以使用它,但必须注意下一个版本可能没有该属性。

到目前为止,尚未解决,即使具有相同的字节码也无法保证具有相同的

jar
文件,因为未指定jar文件中文件的顺序。它可能取决于系统特定的文件迭代顺序。此外,由于jar文件是存储时间戳的zip文件,因此,除非您采取其他措施(例如,对所有条目强制使用特定的时间戳),否则新编译的类文件肯定会产生不同的文件。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/498677.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号