java 汇编的二进制文件根据源文件的顺序而变化

标签 java class assembly compilation javac

我正在使用 javac 编译器,我发现它会根据作为参数传递的源文件的顺序生成不同的结果二进制 .class 文件。事实上,这是使用 ANT 或 MAVEN 进行编译的问题,因为它们对文件的排序不同。

两次编译之间存在差异。我反汇编了代码,发现 javac(优化器?)正在从其中一个编译中删除已弃用的 java jsr/ret 汇编指令。

我想知道这种行为是否是“隐式”编译的结果: http://docs.oracle.com/javase/1.5.0/docs/tooldocs/solaris/javac.html#searching

  • 谁能解释一下这种行为?

  • 如何在 ANT 和 MAVEN 中生成“幂等”编译过程,其中传递给编译器的源文件的顺序并不重要?

最佳答案

您可以获取源列表,然后按字母顺序对其进行排序,包括完整路径。这将使运行之间保持一致。

关于java 汇编的二进制文件根据源文件的顺序而变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9895463/

相关文章:

c++ - 我正在尝试为我的 DynamicArray 类创建一个迭代器。为什么 STL 排序不能与我的迭代器一起使用?

c++ - 使用另一个类的函数指针

assembly - 无效的程序计数器值 : 0

java - 解释 java.util.Date

Java 1.8 Maven + Hibernate + MySQL 示例(XML 映射)

c++ - 为两个相似的类定义一次成员函数?

assembly - 我应该使用堆栈进行长期变量存储吗?

assembly - 大多数现代系统中堆栈增长的方向是什么?

java - 在java中绘制图像的奇怪行为

javascript - 用jsp更新数据库