powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Invokedynamic perfomance.
25 сообщений из 35, страница 1 из 2
Invokedynamic perfomance.
    #38196141
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитал про динамичность в 7ой Java. По результат некоторых измерений вызов методов с помощью MethodHandle почти не уступает по производительности прямым вызовам. Решил опробовать. На деле же оказалось что оно оказалось примерно в 7-8 раз медленней Reflection механизма. Возможно я что-то делаю не так?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.InvocationTargetException;

public class Main {
    static TestInstance test = new TestInstance();

    public static void main(String ... args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Class cl = test.getClass();

        MethodHandles.Lookup lookup = MethodHandles.lookup();
        MethodType mt = MethodType.methodType(void.class);

        MethodHandle handle = lookup.findVirtual(TestInstance.class, "publicMethod", mt);

        try {
            long start = System.currentTimeMillis();
            System.out.println("Start time: " + start);

            for (int i=0; i<1000000000; i++) {
                handle.invoke(test);
            }

            long stop = System.currentTimeMillis();
            System.out.println("Stop time: " + stop);

            System.out.println("Time: " + (stop - start));
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }
}



И довольно странно что IDEA не может найти класс InvokeDynamic, который так часто упоминается в разных статьях.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196145
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
InvokeDynamic это не класс, это специальная инструкция для языков с динамической типизацией, чтобы они более эффективно работали в JVM.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196159
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,


Именно класс InvokeDynamic я взял из этой статьи.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196179
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у тебя и остальные такие бенчмарки, типо
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
try {
            long start = System.currentTimeMillis();
            System.out.println("Start time: " + start);

            for (int i=0; i<1000000000; i++) {
                handle.invoke(test);
            }

            long stop = System.currentTimeMillis();
            System.out.println("Stop time: " + stop);

            System.out.println("Time: " + (stop - start));
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }



то подозреваю, что в случае прямого метода, а может и рефлекшена, может быть выкинута нафиг JITом, ужасный бенчмарк короче, намеряют а потом говорят что java тормозит
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196186
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://download.java.net/jdk7/archive/b122/docs/api/java/dyn/InvokeDynamic.html
Похоже этот класс изначально планировался в JSR, но в финальный релиз Java 7 его не включили.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196190
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,


Причём здесь ваше "java тормозит"? Я не ставил перед собой цели написать какой-нибудь высококачественный и точный бенчмарк, это скорее firstlook.

Что за "прямые методы", что и куда по вашему выбрасывает JIT и причём тут JIT вообще я не понял.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196194
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,


Да, я уже нашёл информацию по этому поводу. Но суть вообще то не в классе InvokeDynamic.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196199
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverзабыл ник,


Причём здесь ваше "java тормозит"? Я не ставил перед собой цели написать какой-нибудь высококачественный и точный бенчмарк, это скорее firstlook.

Что за "прямые методы", что и куда по вашему выбрасывает JIT и причём тут JIT вообще я не понял.
Как я понял JIT вполне может заменить рефлексию/прямые вызовы на прямые вызовы/инлайн(?), т.е. заняться оптимизацией, которую он видимо не может сделать для invoke.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196201
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverДа, я уже нашёл информацию по этому поводу. Но суть вообще то не в классе InvokeDynamic.
Блин, эти классы нужны для использовать скриптовыми языками. Что мы тут вообще пытаемся померять?
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196280
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverзабыл ник,


Причём здесь ваше "java тормозит"? Я не ставил перед собой цели написать какой-нибудь высококачественный и точный бенчмарк, это скорее firstlook.

Что за "прямые методы", что и куда по вашему выбрасывает JIT и причём тут JIT вообще я не понял.
Под прямыми методами я подразумевал обычный колл метода на любом объекте, я думал вы их тоже меряете.
Платформа java обладает одним интересным свойством, адаптивной оптимизацией. Так как выполнение программы контролируется JVM, то она может и успешно собирает статистику вызовов и оптимизирует и компилит в машинный код самые горячие места. Также не стоит забывать о режиме исполнения -client или -server. Есть еще нюансы с GC, класслоадингом и параметрами вирутальной машины.
Я все это упоминаю лишь к тому, чтобы вы поняли, что в java микробенчмарки стоит писать лишь в тех случаях когда ты знаешь что меряешь и зачем. Firstlook зачастую весьма ошибочен и приводит к абсолютно неверным результатам. В вашем бенче еще к тому же происходит OSR(On Stack Replacement) - хитрая штука, если в цикле много итерацией, jit в конце концов компилит в машинные инструкции прямо посреди выполнения и заменяет интерпретируемый код на машинный. К тому же наверняка GC в случае рефлекшена и инвоук динамика работает по-разному, тоже может приводить к смешным результатам.
В общем если что-то хотите померять -
1) Необходимо делать warmup, то есть дать коду поработать минут 5-10, чтобы он обработался джитом и все классы гарантированно загрузились, а не посреди бенча
2) Подумать о том сколько надо выделить памяти, чтобы опять же GC не влез посередине бенча.
3) Тестируемый код всегда должен производить побочные действия вроде println, а то есть вероятность что особо хитрый джит выкинет код нафиг посчитав его ненужным и ни на что не влиящим.
4) Чем больше итераций и прогонов тем лучше, считайте по статистическим методам
Есть много еще факторов, но эти основные
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196399
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,

Спасибо за развёрнутый ответ. Переписал, получились совсем другие результаты. Но хотел бы удостоверится, что в этот раз я не наделал ошибок.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Main {
    static TestInstance test = new TestInstance();

    static void testInvokeDynamic() throws NoSuchMethodException, IllegalAccessException {
        int [] ar = new int[10000000];

        MethodHandles.Lookup lookup = MethodHandles.lookup();
        MethodType mt = MethodType.methodType(int.class);

        MethodHandle handle = lookup.findStatic(TestInstance.class, "publicStaticMethod", mt);

        try {
            long start = System.currentTimeMillis();

            for (int i=0; i<10000000; i++) {
                ar[i] = TestInstance.publicStaticMethod();
            }

            long stop = System.currentTimeMillis();

            System.out.println("InvokeDynamic time: " + (stop - start));
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }

    static void testDirect() {
        int [] ar = new int[10000000];

        try {
            long start = System.currentTimeMillis();

            for (int i=0; i<10000000; i++) {
                ar[i] = TestInstance.publicStaticMethod();
            }

            long stop = System.currentTimeMillis();

            System.out.println("Direct call time: " + (stop - start));
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }

    static void testReflection() throws NoSuchMethodException {
        int [] ar = new int[10000000];

        Method method = test.getClass().getMethod("publicStaticMethod");

        try {
            long start = System.currentTimeMillis();

            for (int i=0; i<10000000; i++) {
                ar[i] = (int)method.invoke(test);
            }

            long stop = System.currentTimeMillis();

            System.out.println("Reflection time: " + (stop - start));
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }

    static void testReflectionAccessible() throws NoSuchMethodException {
        int [] ar = new int[10000000];

        Method method = test.getClass().getMethod("publicStaticMethod");
        method.setAccessible(true);

        try {
            long start = System.currentTimeMillis();

            for (int i=0; i<10000000; i++) {
                ar[i] = (int)method.invoke(test);
            }

            long stop = System.currentTimeMillis();

            System.out.println("Reflection accessible time: " + (stop - start));
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }

    public static void main(String ... args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Main.testDirect();
        Main.testInvokeDynamic();
        Main.testReflection();
        Main.testReflectionAccessible();

        System.out.println("\n___\n");

        Main.testDirect();
        Main.testInvokeDynamic();
        Main.testReflection();
        Main.testReflectionAccessible();
    }
}



Blazkowicz,

Почему вы думаете, что invokedynamic не может иметь практического применения в Java? Я, например, сейчас пишу приложение которое активно работает с Reflection. Дак почему бы мне не заменить её на invokedynamic?
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196417
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverПочему вы думаете, что invokedynamic не может иметь практического применения в Java?

А почему вы думаете что может?

DoSOfRedRiverЯ, например, сейчас пишу приложение которое активно работает с Reflection.

setAccessible(true) оптимизацию уже делали?

DoSOfRedRiverДак почему бы мне не заменить её на invokedynamic?
Но почему именно invokedynamic??? Почему не Unsafe? Почему не кодогенерация? Откуда такая уверенность что invokedynamic это какая-то "быстрая рефлексия"???
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196432
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczsetAccessible(true) оптимизацию уже делали?

Да. В сообщении выше даже код приведён. Как правило оно работает лишь на 20-30% быстрей.

BlazkowiczНо почему именно invokedynamic??? Почему не Unsafe? Почему не кодогенерация? Откуда такая уверенность что invokedynamic это какая-то "быстрая рефлексия"???

Наверное, на то он и Unsafe, что его использование не желательно, верно?
Я не говорил о том, что invokedynamic это "быстрая рефлексия", я привёл его как хорошую замену рефлексии.
Ну и как по вашему должен использоваться invokedynamic? В других JVM based языках? А если я пишу некий интерпретатор, который по функционалу схож простым скриптовым языком? Почему я не могу использовать indy в Java?
Лично я не вижу адекватных причин не использовать indy. И если с рефлексией как правило всё упиралось в производительность, то тут откешированный метод исполняется даже быстрей direct call.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196435
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

В конце концов, мне кажется именно invokedynamic будет, во всяком случае частично, использоваться в 8ой Java для реализации ссылок на методы.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196441
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiver,

Воооо гораздо лучше)
Пара мелких замечаний, чтобы уж наверняка код не выкинулся я бы после long stop = ...
сделал бы println(ar.toString()),
далее я бы убедился что в процессе бенча не происходит динамической компиляции и вызово GC, для этого есть опции +PrintCompilation и куча параметров для GC, точные названия не помню - достаточно писать их в файл, и после теста проверить что сборок не было.
Если вы видите что динамическая компиляция все еще присутствует или GC вызывается, то поиграться с параметрами jvm, пока не добьетесь того чего нужно. Вот после этого результатам уже можно доверять.
Кстати запускаете как -server?
Еще бы посоветовал после warmup делать System.gc() два раза, два потому что есть тонкости с финализаторами.

Ну и выложите потом результаты - самому интересно.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196454
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverBlazkowicz,

В конце концов, мне кажется именно invokedynamic будет, во всяком случае частично, использоваться в 8ой Java для реализации ссылок на методы.
ОК. Убедили.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196506
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот собственно код:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;oSOfRR

public class Main {
    public static final int COUNT = 100000000;
    static TestInstance test = new TestInstance();

    static void testInvokeDynamic() throws NoSuchMethodException, IllegalAccessException {
        int [] ar = new int[COUNT];

        MethodHandles.Lookup lookup = MethodHandles.lookup();
        MethodType mt = MethodType.methodType(int.class);

        MethodHandle handle = lookup.findStatic(TestInstance.class, "publicStaticMethod", mt) ;

        try {
            long start = System.currentTimeMillis();

            for (int i=0; i<COUNT; i++) {
                ar[i] = TestInstance.publicStaticMethod();
            }

            long stop = System.currentTimeMillis();

            System.out.println(ar);

            System.out.println("InvokeDynamic time: " + (stop - start));
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }

    static void testDirect() {
        int [] ar = new int[COUNT];

        try {
            long start = System.currentTimeMillis();

            for (int i=0; i<COUNT; i++) {
                ar[i] = TestInstance.publicStaticMethod();
            }

            long stop = System.currentTimeMillis();

            System.out.println(ar);

            System.out.println("Direct call time: " + (stop - start));
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }

    static void testReflection() throws NoSuchMethodException {
        int [] ar = new int[COUNT];

        Method method = test.getClass().getMethod("publicStaticMethod");

        try {
            long start = System.currentTimeMillis();

            for (int i=0; i<COUNT; i++) {
                ar[i] = (int)method.invoke(test);
            }

            long stop = System.currentTimeMillis();

            System.out.println(ar);

            System.out.println("Reflection time: " + (stop - start));
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }

    static void testReflectionAccessible() throws NoSuchMethodException {
        int [] ar = new int[COUNT];

        Method method = test.getClass().getMethod("publicStaticMethod");
        method.setAccessible(true);

        try {
            long start = System.currentTimeMillis();

            for (int i=0; i<COUNT; i++) {
                ar[i] = (int)method.invoke(test);
            }

            long stop = System.currentTimeMillis();

            System.out.println(ar);

            System.out.println("Reflection accessible time: " + (stop - start));
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }

    public static void main(String ... args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Main.testDirect();
        Main.testInvokeDynamic();
        Main.testReflection();
        Main.testReflectionAccessible();

        System.out.println("\n___\n");

        System.gc();
        System.gc();

        Main.testDirect();
        Main.testInvokeDynamic();
        Main.testReflection();
        Main.testReflectionAccessible();
    }
}



Параметры машины:

-Xms512m -Xmx1g -XX:+UseConcMarkSweepGC -client


System.out:

[I@2d8b62e0
Direct
call time: 164
[I@37eaab
InvokeDynamic
time: 153
[I@7f38f3d1
Reflection
time: 840
[I@1e48d65
Reflection
accessible time: 637

___

[I@1e5cd7f9
Direct
call time: 158
[I@77be91c8
InvokeDynamic
time: 143
[I@545ec940
Reflection
time: 780
[I@39ee4dbe
Reflection
accessible time: 611


С PrintCompilation сам не разобрался, но вот на всякий случай System.out с ним:

137 1 java.lang.String::hashCode (55 bytes)
137 2 java.lang.String::charAt (29 bytes)
415 3 TestInstance::publicStaticMethod (12 bytes)
416 1 % ! Main::testDirect @ 11 (76 bytes)
568 1 % ! Main::testDirect @ -2 (76 bytes) made not entrant
[I@121f34d0
Direct
call time: 155
684 2 % ! Main::testInvokeDynamic @ 35 (107 bytes)
[I@512d297a
InvokeDynamic
time: 158
948 4 java.lang.Object::<init> (1 bytes)
953 5 java.lang.Number::<init> (5 bytes)
953 6 java.lang.Integer::<init> (10 bytes)
953 7 java.lang.reflect.Modifier::isPublic (12 bytes)
953 8 n sun.reflect.Reflection::getClassAccessFlags (0 bytes) (static)
953 9 sun.reflect.Reflection::quickCheckMemberAccess (10 bytes)
953 10 java.lang.reflect.Method::invoke (63 bytes)
954 11 sun.reflect.DelegatingMethodAccessorImpl::invoke (10 bytes)
957 12 java.lang.Integer::intValue (5 bytes)
957 13 ! sun.reflect.GeneratedMethodAccessor1::invoke (52 bytes)
958 3 % ! Main::testReflection @ 28 (111 bytes)
[I@1e48d65
Reflection
time: 849
1896 4 % ! Main::testReflectionAccessible @ 33 (116 bytes)
[I@1e5cd7f9
Reflection
accessible time: 679

___

2597 14 ! Main::testDirect (76 bytes)
2679 5 % ! Main::testDirect @ 11 (76 bytes)
[I@77be91c8
Direct
call time: 151
2830 15 ! Main::testInvokeDynamic (107 bytes)
[I@1aeeb406
InvokeDynamic
time: 159
3086 16 ! Main::testReflection (111 bytes)
[I@39ee4dbe
Reflection
time: 818
4001 17 ! Main::testReflectionAccessible (116 bytes)
[I@4aa594e1
Reflection
accessible time: 662




По результатам:

Direct call time: 164
InvokeDynamic time: 153
Reflection time: 840
Reflection accessible time: 637

___


Direct call time: 158
InvokeDynamic time: 143
Reflection time: 780
Reflection accessible time: 611

В разных случая во время "прогрева" invokedynamic был быстрее и медленнее прямых вызовов. Но уже будучи откешированным indy метод исполняется быстрей.
Рефлексия здесь не конкурентноспособна. Есть некий CGLIB который позволяет это дело оптимизировать, исключая JNI, или что то вроде того, но не думаю что он по производительности сравним с indy.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196528
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы все-таки гонял с -server а не -client. К тому же я думаю у вас ошибка, метод testDirect и testDynamicInvoke делают одно и тоже.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196663
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая ирония. В коде действительно ошибка. Следовательно, вопрос остаётся открытым, потому как на тестах invokedynamic оказался до трёх раз медленнее не оптимизированного Reflection. Может действительно дело в JIT, который не умеет оптимизировать новую инструкцию?
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196673
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне всегда казалось, что InvokeDynamic это новая команда byte-кода для JVM. Т.е. мне кажется, если вы хотите какое-то сравнение сделать, вам надо сделать сравнение именно байт кода.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38196701
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvМне всегда казалось, что InvokeDynamic это новая команда byte-кода для JVM. Т.е. мне кажется, если вы хотите какое-то сравнение сделать, вам надо сделать сравнение именно байт кода.
Тема про MethodHandler. invokedynamic тут, действительно, не при чем.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38197044
DoSOfRedRiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вообще MethodHandle позволяет задействовать инструкцию invokedynamic. Ну и меряем производительность этой инструкции, вроде как.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38197055
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiverНу вообще MethodHandle позволяет задействовать инструкцию invokedynamic.
Ткните нас, пожалуйста, носом в документацию где об этом написано.

DoSOfRedRiverНу и меряем производительность этой инструкции, вроде как.
Не только инструкции но и кучи другой инфраструктуры вокруг.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38197058
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczОК. Убедили.
Походу не "убедили", а обманули.
...
Рейтинг: 0 / 0
Invokedynamic perfomance.
    #38197060
Valery Shiskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DoSOfRedRiver,

На сайте http://groovy.codehaus.org можно найти интересную информацию по поводу invokeDynamic
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Invokedynamic perfomance.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]