gpt4 book ai didi

java - JVM 是否通过在同一方法中存储相似方法调用的结果来修复我的低效代码?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:06 24 4
gpt4 key购买 nike

给定代码

if (linkedHashMap.get(string) == null) { 
linkedHashMap.put(string, object);
} else {
linkedHashMap.get(string).increment();
}

Interputer/JVM 是否决定:linkedHashMap.get(string) 被使用了两次,因此为此调用分配了一个变量,或者它只是低效地执行了两次完全相同的调用?

最佳答案

如果有足够先进的 JIT 和足够简单的 get() 实现 - 以及它调用的 equals() - 它可能会在某个时候得到优化。但没有任何保证。

get() 的实现细节很重要,因为它可能包括内存可见性影响(原子、锁)或具有超出编译器执行冗余代码消除能力的复杂性。

例如我猜想 Collections.singletonMap 生成的 map 很容易优化。但是 ConcurrentHashMap 当然不是因为它使用了 volatile 和锁。

但最后唯一确定的方法是查看所讨论方法的生成程序集,在它变得足够热以使其被调用者内联被 JIT 后。

关于java - JVM 是否通过在同一方法中存储相似方法调用的结果来修复我的低效代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31100700/

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