【发布时间】:2018-04-19 18:08:01
【问题描述】:
我最近看到了一个让我在 SO 上问这个问题的行为。我希望人们也能够分享他们的发现。
如果使用 JDK 1.8 u66 和 JDK 1.8 u121 编译(未更改)同一个文件,类文件(字节码)会有所不同吗?我的意思是:
1) 我使用 JDK 1.8 u66 编译应用程序 2) 我对 1 或 2 个文件进行了更改并使用 JDK 1.8 u66 重新编译。
我是否可以期望一些未更改的类文件具有不同的二进制内容,即使它们没有更改?
我的原因是,当我对一个未在上述步骤中更改的文件进行哈希处理时——它们在磁盘上的大小相同,但哈希码完全不同。我使用 Winmerge 比较了这两个版本,其中报告的大小相同,但二进制内容不同。以下是我使用 Winmerge 进行的比较(蓝色标记的项目与我的源名称相关,因此我不得不将其屏蔽) - 但请注意 208 和 248 的区别。
这是预期的吗?如果是这样,有人可以指点我解释这一点的文献吗?
问候,
【问题讨论】:
-
您是否比较了字节码以发现它们的不同之处?
-
是的,我做到了,它们在方法参数名称上有所不同,其中代码中的代码是 208 而不是 248。这是唯一的区别
-
所以只有一个字节改变了?不过,我无法真正说出您所说的方法参数名称是什么意思。
-
@Bubleta 用截图更新了问题。
-
这个问题可能是不稳定的lambda方法名造成的,见JDK-8067422