使用库存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;
}
...
Run Code Online (Sandbox Code Playgroud)
通过许多其他价值观.
您忽略了Java为面向堆栈的虚拟机编译为字节码的事实.无论您在Java级别尝试什么样的低级优化技巧,都在很大程度上是无效的.当JIT编译器为目标体系结构生成程序集时,就会发生真正的优化,这个程序在大多数情况下都无法控制或关注.
你应该在更大的图片上进行优化.让JIT编译器处理低级优化.