开发者

How much programmer "assist" does Java normally need for a switch to JIT to a dispatch table?

开发者 https://www.devze.com 2023-04-08 07:03 出处:网络
I understand that Java does optimizations across the board and can optimize switches depending on how many cases there are, whether the switch is sparse or dense, and if the code is even hot enough fo

I understand that Java does optimizations across the board and can optimize switches depending on how many cases there are, whether the switch is sparse or dense, and if the code is even hot enough for the JIT to optimize said code. I'm just wondering if I need to further provide "assist" like using bitwise and on the variable being tested or bitwise shift the variable to a "nicer" number, assuming said code is indeed very hot. "nicer" being开发者_JAVA百科 0xXX rather than 0xFFXX. Are there hotspot JIT docs that specifically state what's required? Rather than "just keep it along the general programming guidelines of xxx."


The decision for either tableswitch or lookupswitch is already done by the javac compiler. I have never heard that the JIT tries to transform a lookupswitch into a tableswitch.

So your first step should be a check into what bytecode javac translated your switch.


There is not going to be an easy answer to this.

I would take this question to hotspot-dev - they may be able to provide more information about how this happens.

The other people who may have interesting perspectives on this hang out on the jvm-l mailing list (Charlie Nutter, Remi Forax, John Rose, etc.)


Because Java itself runs over a virtual machine, unless I'm missing something here, I don't think there's an easy way to do this.

So with Java, you get a black box of sorts, and to optimize more is risky, IMHO.

For the Hotspot JIT whitepaper, see here

0

精彩评论

暂无评论...
验证码 换一张
取 消