使用现有的 Sun 1.6 编译器和 JRE/JIT,使用 Duff 的设备示例的扩展展开来展开循环是否是个好主意?或者它最终会成为没有性能优势的代码混淆?
我使用的 Java 分析工具在逐行 CPU 使用方面的信息不如 valgrind,因此我希望通过其他人的经验来增加测量。
请注意,当然,您不能对Duff 的设备进行精确编码,但您可以进行基本的展开,这就是我想知道的。
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;
}
...
通过许多其他值。