gpt4 book ai didi

java - 相同的字节码是否意味着源代码相同?

转载 作者:行者123 更新时间:2023-12-01 23:19:49 25 4
gpt4 key购买 nike

我在 for 循环中声明了一个变量并编译了该类。在下一个类中,我做了同样的事情,但这次我只是在循环外声明了变量。在这两种情况下,生成的字节代码是相同的,但当 jvm 执行代码时,两种性能读数都不同。

我的问题是:

  1. 相同的字节码是否意味着相同的源代码? (我认为不会,因为我每次都有不同的代码)

  2. 相同的 JVM 如何为相同的字节码提供不同的性能测量。 (我已经多次捕获每个字节码的数据,因此我问这个问题。还使用相同的 JVM,并且系统上没有运行其他应用程序)

Java 中有很多可用于循环内部和外部变量声明的链接。

我真的在等待最强的答案!!!

最佳答案

Does Same byte code means same source code ? (I think no because I had different code each time)

不相同。例如,源代码中的注释和空格不会出现在字节码中。变量名称和其他事物也不会。 (不过,变量名称通常会出现在类文件的其他位置。)

此外,同一算法的两个等效表达式可以编译为相同的字节码。

How does same JVM gives different performance measurements for same bytecode.

我可以想到很多原因:

  • 这可能只是由于基准测试设计不当而造成的。一个典型的 Java 基准测试错误是没有正确考虑“JVM 预热”效应。

  • 这可能是由于您调用代码的方式不同造成的。

  • 这可能是由于输入的差异造成的。 (JIT 利用在执行早期收集的统计信息来决定如何优化代码。不同的输入可能会导致不同的执行统计信息……以及不同的优化代码。)

  • 这可能是由于您进行测试时系统上发生的其他事情造成的。

<小时/>

Here are my performance readings in milliseconds Outside declaration of variable 10076ms Inside declaration of variable 10100 ms Outside declaration of variable 10130ms Inside declaration of variable 10274ms

这么小的差异很可能是由于硬件因素/环境因素造成的;例如CPU 频率缩放或磁盘旋转延迟。请注意,10076 和 10100 之间的差异小于 10076 和 10130 之间的差异。

<小时/>

如果您想要一个明确的答案,您需要提供完整的测试代码,以便人们可以检查问题并尝试重现您的结果。

关于java - 相同的字节码是否意味着源代码相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20756284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com