При использовании стандартного компилятора Sun 1.6 и JRE / JIT, будет ли хорошей идеей использовать расширенную развертку, показанную устройством Даффа, для развертывания цикла? Или это заканчивается обфускацией кода без повышения производительности?
Инструменты профилирования Java, которые я использовал, менее информативны о линейном использовании ЦП, чем, скажем, valgrind, поэтому я искал возможности расширить измерения с опытом других людей.
Обратите внимание, что, конечно, вы не можете точно кодировать устройство Даффа, но вы можете выполнить базовую развертку, и это то, что мне интересно.
short stateType = data.getShort(ptr);
switch (stateType) {
case SEARCH_TYPE_DISPATCH + 16:
if (c > data.getChar(ptr + (3 << 16) - 4)) {
ptr += 3 << 16;
}
case SEARCH_TYPE_DISPATCH + 15:
if (c > data.getChar(ptr + (3 << 15) - 4)) {
ptr += 3 << 15;
}
...
вниз через многие другие значения.