使用标准的Sun 1.6编译器和JRE/JIT,采用类似Duff's Device这样的大规模展开循环的方式是否是一个好主意?还是说这会成为代码混淆而没有性能提升?
我使用过的Java性能分析工具对于逐行CPU使用率的信息比如valgrind等工具要少得多,因此我想通过其他人的经验来补充测量。
当然,你不能完全复制Duff's Device的代码,但你可以进行基本的展开,这就是我想知道的。
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;
}
...
顺着许多其他值往下走。