5

我知道 Java 会进行全面优化,并且可以根据有多少情况、开关是稀疏还是密集以及代码是否足够热以使 JIT 优化所述代码来优化开关。我只是想知道我是否需要进一步提供“帮助”,例如使用按位和正在测试的变量,或者将变量按位移动到“更好”的数字,假设所述代码确实非常热。“更好”是 0xXX 而不是 0xFFXX。是否有专门说明所需内容的热点 JIT 文档?而不是“只遵循 xxx 的一般编程指南”。

4

3 回答 3

2

编译器已经完成了其中一个tableswitch或一个的决定。我从未听说过 JIT 试图将 a转换为.lookupswitchjavaclookupswitchtableswitch

所以你的第一步应该是检查javac你的switch.

于 2011-10-01T14:30:22.100 回答
1

对此不会有一个简单的答案。

我会把这个问题带到热点开发者那里——他们可能会提供更多关于这是如何发生的信息。

其他可能对此有有趣观点的人会在 jvm-l 邮件列表上闲逛(Charlie Nutter、Remi Forax、John Rose 等)

于 2011-09-30T14:22:46.660 回答
0

因为 Java 本身在虚拟机上运行,​​除非我在这里遗漏了什么,否则我认为没有简单的方法可以做到这一点。

因此,使用 Java,您会得到一个黑盒子,并且进行更多优化是有风险的,恕我直言。

有关 Hotspot JIT 白皮书,请参见此处

于 2011-09-29T02:15:05.587 回答