0

Я генерирую последовательность байт-кода после многократного вызова метода. В начале строки я впервые применил существующие индексы переменных к новым локальным номерам переменных в случае любого исключения в встроенном методе. Эта операция приводит к ряду последовательностей 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.

Thanks

+0

Анализ потока данных? – immibis

ответ

1

Не беспокойтесь об этом. Если метод выполняется много, JVM, вероятно, оптимизирует его, и в этот момент дополнительные нагрузки и магазины будут оптимизированы.

Попробуйте профилировать его, чтобы убедиться, что он даже стоит микро-оптимизации.

+1

На самом деле, я планирую сделать оптимизацию на уровне байт-кода, а не оставлять JIT-компилятор. Моя цель - увидеть улучшение, если оптимизация выполняется на уровне байт-кода. –

+1

Вы можете попробовать, если хотите, но JVM, вероятно, сделает любую оптимизацию уровня байткода нерелевантной. – Antimony

+0

У вас есть доказательства того, что JVM оптимизирует это? – immibis