Duff的设备能加速Java代码吗?

bma*_*ies 8 java duffs-device

使用库存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)

通过许多其他价值观.

Mat*_*hen 24

它是否是一个好主意(它不是)并不重要,因为它不会编译.

编辑:这在JLS中明确提到:

可以在C或C++中使用称为Duff设备的技巧来展开循环,但这不是Java编程语言中的有效代码:

或者,更直接地(来自同一部分):

伟大的C黑客,汤姆,但它在这里无效.

编辑:回答你的更多(太)一般性问题,通常没有.您通常应该依赖JIT.


pol*_*nts 9

您忽略了Java为面向堆栈的虚拟机编译为字节码的事实.无论您在Java级别尝试什么样的低级优化技巧,都在很大程度上是无效的.当JIT编译器为目标体系结构生成程序集时,就会发生真正的优化,这个程序在大多数情况下都无法控制或关注.

你应该在更大的图片上进行优化.让JIT编译器处理低级优化.

  • 我不是在忽视它,我问你这件事. (7认同)