gpt4 book ai didi

java - jit 会优化分支太少的 switch 语句吗?

转载 作者:行者123 更新时间:2023-11-29 03:42:46 27 4
gpt4 key购买 nike

最近我遇到了一个静态代码分析工具 (PMD) 提示 switch 语句分支太少的情况。它建议将它变成一个 if 语句,我不想​​这样做,因为我知道很快就会添加更多的案例。但我想知道 javac 是否执行了这样的优化。我使用 JAD 反编译了代码,但它仍然显示一个开关。这可能是 JIT 优化的运行时吗?

更新:请不要被我问题的上下文所误导。我不是在询问 PMD,我不是在询问是否需要进行微优化等。问题显然只有这个:当前(Oracle 1.6.x)JVM 实现是否包含一个 JIT,它也处理开关是否有几个分支。

最佳答案

确定 JIT 编译器如何优化 switch 语句的方法是:

  • 阅读 JIT 编译器源代码(OpenJDK 6 和 7 是开源的),或者
  • 使用开关运行 JVM,该开关指示将感兴趣的类的 JIT 编译代码转储到文件中。

请注意,与所有与性能和优化相关的问题一样,答案取决于硬件平台以及 JVM 供应商和版本。

引用:Disassemble Java JIT compiled native bytecode


如果这个问题“只是无聊的好奇心”,那就这样吧。

但是,还应指出,出于性能原因重写代码以使用 switchif 可能不是一个好主意和/或浪费时间。

  • 这可能是浪费时间,因为原始版本和手动优化版本之间的时间差异(如果有的话)很可能是微不足道的。

  • 这是个坏主意,因为您的优化可能只对特定的硬件和 JVM 组合有帮助。在其他人身上,它可能没有效果……甚至是反优化。

简而言之,即使您知道 JIT 优化器如何处理此问题,您也可能不应该在编程中考虑它。

(当然,当您遇到真正可衡量的性能问题时,异常(exception)情况是,分析指出(比如)3 分支 switch 是瓶颈之一。)

关于java - jit 会优化分支太少的 switch 语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12387128/

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