可能优化字节码序列

时间:2016-03-27 23:33:35

标签: compilation bytecode java-bytecode-asm bytecode-manipulation jvm-bytecode

我在内联多方法调用后生成一个字节码序列。在内联的开头,我首先将现有的变量索引添加到新的局部变量数,以防内联方法中出现任何异常。此操作在最终字节码中产生许多xLOAD和xStore序列。样本是:

   GETFIELD DYNGuardWithTestHandle1456194204777.guard : Ljava/lang/invoke/MethodHandle;
    INVOKEVIRTUAL java/lang/invoke/MethodHandle.invokeExact ()Z
    IFEQ L0
    ALOAD 0
    ALOAD 1
    ALOAD 2
    ALOAD 3
    ALOAD 4
    ASTORE 5
    ASTORE 6
    ASTORE 7
    ASTORE 8
    ASTORE 9
    ALOAD 9
    ALOAD 8
    ALOAD 7
    ALOAD 6
    ALOAD 5
    ASTORE 10
    ASTORE 11
    ASTORE 12
    ASTORE 13
    ASTORE 14
    ALOAD 14
    GETFIELD DYNGuardWithTestHandle1456194204777.trueTarget_guard_next : Ljava/lang/invoke/MethodHandle;
    LDC "fd1a2fc6-03ef-4fd8-a2ae-ebbaa274fa97"
    INVOKESTATIC java/lang/invoke/ObjectTransfer.peek (Ljava/lang/String;)Ljava/lang/Object;
    CHECKCAST org/jruby/RubyClass
    ALOAD 11
    INVOKEVIRTUAL java/lang/invoke/MethodHandle.invokeExact (Lorg/jruby/RubyClass;Lorg/jruby/runtime/builtin/IRubyObject;)Z
    GOTO L1
   L1
    IFEQ L2
    ALOAD 9
    ALOAD 8
    ALOAD 7
    ALOAD 6
    ALOAD 5
    ASTORE 15
    ASTORE 16
    ASTORE 17
    ASTORE 18
    ASTORE 19
    ALOAD 19
    ALOAD 16
    ALOAD 18
    ALOAD 15
    ASTORE 20
    ASTORE 21
    ASTORE 22
    ASTORE 23
    ALOAD 23
    ALOAD 22
    CHECKCAST org/jruby/RubyString
    ALOAD 21
    ALOAD 20
    ASTORE 24
    ASTORE 25
    ASTORE 26
    ASTORE 27
    ALOAD 27
    ALOAD 26
    ALOAD 25
    ALOAD 24
    ASTORE 28
    ASTORE 29
    ASTORE 30
    ASTORE 31

我想知道是否有一些众所周知的优化来消除这些xLoad / xStore序列。

谢谢

1 个答案:

答案 0 :(得分:1)

不要担心。如果该方法执行很多,JVM可能无论如何都会优化它,此时额外的加载和存储将被优化掉。

尝试对其进行分析,看看它是否值得进行微优化。

相关问题