- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近我遇到了一个静态代码分析工具 (PMD) 提示 switch
语句分支太少的情况。它建议将它变成一个 if 语句,我不想这样做,因为我知道很快就会添加更多的案例。但我想知道 javac
是否执行了这样的优化。我使用 JAD 反编译了代码,但它仍然显示一个开关。这可能是 JIT 优化的运行时吗?
更新:请不要被我问题的上下文所误导。我不是在询问 PMD,我不是在询问是否需要进行微优化等。问题显然只有这个:当前(Oracle 1.6.x)JVM 实现是否包含一个 JIT,它也处理开关是否有几个分支。
最佳答案
确定 JIT 编译器如何优化 switch 语句的方法是:
请注意,与所有与性能和优化相关的问题一样,答案取决于硬件平台以及 JVM 供应商和版本。
引用:Disassemble Java JIT compiled native bytecode
如果这个问题“只是无聊的好奇心”,那就这样吧。
但是,还应指出,出于性能原因重写代码以使用 switch
或 if
可能不是一个好主意和/或浪费时间。
这可能是浪费时间,因为原始版本和手动优化版本之间的时间差异(如果有的话)很可能是微不足道的。
这是个坏主意,因为您的优化可能只对特定的硬件和 JVM 组合有帮助。在其他人身上,它可能没有效果……甚至是反优化。
简而言之,即使您知道 JIT 优化器如何处理此问题,您也可能不应该在编程中考虑它。
(当然,当您遇到真正可衡量的性能问题时,异常(exception)情况是,分析指出(比如)3 分支 switch
是瓶颈之一。)
关于java - jit 会优化分支太少的 switch 语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12387128/
我正在尝试将之前使用 serial->write... 函数从 GUI 读取的 7 个变量发送到我的微 Controller 。 我在我的微 Controller 上写了一个小程序,如果有输入,它就会
我正在通过制作一个通用的 List 来学习继承类(class)。 List可以是 Unordered列表,Ordered列表,一个 Stack , 或 Queue . 我的 List类看起来像这样:
我必须使用非科学(即无尾数/指数/E)字符串转换十进制数。我的代码如下所示: /*! \brief Converts a XML Schema Decimal */ char *ToDecimal(d
private static void Main(string[] args) { for (;;) { TemporaryCityTool.TemporaryCity
我在 YARN 集群 (HDP 2.4) 中使用 Spark,设置如下: 1 个主节点 64 GB RAM(50 GB 可用) 24 核(19 核可用) 5个从节点 每个 64 GB RAM(50 G
这是我使用 powershell 脚本的第一天我正在尝试使用 VMM Cmdlet Get-SCVirtualMachine当我像 这样使用它时它工作正常 PS C:\> $VM = Get-SCVi
我决定在 RubyMine 7.1.4 中使用远程 Ruby SDK。 设置了 Vagrant 机器( hashicorp/precise32 ),RVM、Ruby 2.2.1p85(2015-02-
我在 sklearn 上使用 Xgboost 实现进行 kaggle 竞赛。但是,我收到此“警告”消息: $ python Script1.py /home/sky/private/virtualen
我是一名优秀的程序员,十分优秀!