可能优化字节码序列



我在内联多方法调用后生成一个字节码序列。在内联开始时,我首先将现有的变量索引弹出到一个新的局部变量编号,以防内联方法中出现任何异常。此操作在最终的字节码中产生许多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序列。

感谢

不用担心。如果这个方法执行得很多,JVM可能无论如何都会对它进行优化,这时额外的加载和存储就会被优化掉。

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

相关内容

  • 没有找到相关文章

最新更新