gpt4 book ai didi

java - Java 编译器通常会预先计算最终字段的哈希码吗?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:56:39 26 4
gpt4 key购买 nike

我有一个 HashMap 密集型 Java 程序,其中几个类具有从 final 字段计算的哈希码。例如:

public class Foo {
private final int bar;
private final String zot;

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + bar;
result = prime * result + zot.hashCode();
return result;
}
}

编译器可能会观察到 hashcode 在对象初始化后不能更改,并将其预先计算到一个额外的 private final 字段中。当前的 Java 编译器是否像 Oracle JDK 7 中的那样执行此操作?我可以分解 .class 文件,但是 JIT 也可能在运行时进行这种优化,我不会在那里看到它。无论如何,我对除此之外的其他情况感兴趣,因此最好找到一种通用方法来识别编译器自动执行的任何优化。

最佳答案

Do current Java compilers do this, like the one in Oracle JDK 7?

javac 几乎没有做任何优化。

I could disassmble the .class file,

您可能不喜欢您在优化方面看到的内容。 ;)

but then the JIT may also do this kind of optimization at runtime and I would not see it there.

如果 JIT 确实对此进行了优化,您将看不到它,事实上它也不会这样做。这就是为什么 String 在运行时显式地在代码中缓存它的 hashCode() 的原因。

关于java - Java 编译器通常会预先计算最终字段的哈希码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19041498/

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