|
|
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
Прочитал про динамичность в 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. И довольно странно что IDEA не может найти класс InvokeDynamic, который так часто упоминается в разных статьях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2013, 23:01:12 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
InvokeDynamic это не класс, это специальная инструкция для языков с динамической типизацией, чтобы они более эффективно работали в JVM. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2013, 23:08:24 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
Если у тебя и остальные такие бенчмарки, типо Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. то подозреваю, что в случае прямого метода, а может и рефлекшена, может быть выкинута нафиг JITом, ужасный бенчмарк короче, намеряют а потом говорят что java тормозит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2013, 23:46:01 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
http://download.java.net/jdk7/archive/b122/docs/api/java/dyn/InvokeDynamic.html Похоже этот класс изначально планировался в JSR, но в финальный релиз Java 7 его не включили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2013, 23:52:32 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
забыл ник, Причём здесь ваше "java тормозит"? Я не ставил перед собой цели написать какой-нибудь высококачественный и точный бенчмарк, это скорее firstlook. Что за "прямые методы", что и куда по вашему выбрасывает JIT и причём тут JIT вообще я не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 00:01:12 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Да, я уже нашёл информацию по этому поводу. Но суть вообще то не в классе InvokeDynamic. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 00:04:37 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
DoSOfRedRiverзабыл ник, Причём здесь ваше "java тормозит"? Я не ставил перед собой цели написать какой-нибудь высококачественный и точный бенчмарк, это скорее firstlook. Что за "прямые методы", что и куда по вашему выбрасывает JIT и причём тут JIT вообще я не понял. Как я понял JIT вполне может заменить рефлексию/прямые вызовы на прямые вызовы/инлайн(?), т.е. заняться оптимизацией, которую он видимо не может сделать для invoke. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 00:10:08 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
DoSOfRedRiverДа, я уже нашёл информацию по этому поводу. Но суть вообще то не в классе InvokeDynamic. Блин, эти классы нужны для использовать скриптовыми языками. Что мы тут вообще пытаемся померять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 00:11:46 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
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) Чем больше итераций и прогонов тем лучше, считайте по статистическим методам Есть много еще факторов, но эти основные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 03:17:51 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
забыл ник, Спасибо за развёрнутый ответ. Переписал, получились совсем другие результаты. Но хотел бы удостоверится, что в этот раз я не наделал ошибок. Код: 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. Blazkowicz, Почему вы думаете, что invokedynamic не может иметь практического применения в Java? Я, например, сейчас пишу приложение которое активно работает с Reflection. Дак почему бы мне не заменить её на invokedynamic? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 13:06:00 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
DoSOfRedRiverПочему вы думаете, что invokedynamic не может иметь практического применения в Java? А почему вы думаете что может? DoSOfRedRiverЯ, например, сейчас пишу приложение которое активно работает с Reflection. setAccessible(true) оптимизацию уже делали? DoSOfRedRiverДак почему бы мне не заменить её на invokedynamic? Но почему именно invokedynamic??? Почему не Unsafe? Почему не кодогенерация? Откуда такая уверенность что invokedynamic это какая-то "быстрая рефлексия"??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 13:54:35 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczsetAccessible(true) оптимизацию уже делали? Да. В сообщении выше даже код приведён. Как правило оно работает лишь на 20-30% быстрей. BlazkowiczНо почему именно invokedynamic??? Почему не Unsafe? Почему не кодогенерация? Откуда такая уверенность что invokedynamic это какая-то "быстрая рефлексия"??? Наверное, на то он и Unsafe, что его использование не желательно, верно? Я не говорил о том, что invokedynamic это "быстрая рефлексия", я привёл его как хорошую замену рефлексии. Ну и как по вашему должен использоваться invokedynamic? В других JVM based языках? А если я пишу некий интерпретатор, который по функционалу схож простым скриптовым языком? Почему я не могу использовать indy в Java? Лично я не вижу адекватных причин не использовать indy. И если с рефлексией как правило всё упиралось в производительность, то тут откешированный метод исполняется даже быстрей direct call. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 14:18:25 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, В конце концов, мне кажется именно invokedynamic будет, во всяком случае частично, использоваться в 8ой Java для реализации ссылок на методы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 14:24:17 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
DoSOfRedRiver, Воооо гораздо лучше) Пара мелких замечаний, чтобы уж наверняка код не выкинулся я бы после long stop = ... сделал бы println(ar.toString()), далее я бы убедился что в процессе бенча не происходит динамической компиляции и вызово GC, для этого есть опции +PrintCompilation и куча параметров для GC, точные названия не помню - достаточно писать их в файл, и после теста проверить что сборок не было. Если вы видите что динамическая компиляция все еще присутствует или GC вызывается, то поиграться с параметрами jvm, пока не добьетесь того чего нужно. Вот после этого результатам уже можно доверять. Кстати запускаете как -server? Еще бы посоветовал после warmup делать System.gc() два раза, два потому что есть тонкости с финализаторами. Ну и выложите потом результаты - самому интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 14:34:38 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
DoSOfRedRiverBlazkowicz, В конце концов, мне кажется именно invokedynamic будет, во всяком случае частично, использоваться в 8ой Java для реализации ссылок на методы. ОК. Убедили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 15:07:33 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
Вот собственно код: Код: 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. Параметры машины: -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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 17:03:37 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
я бы все-таки гонял с -server а не -client. К тому же я думаю у вас ошибка, метод testDirect и testDynamicInvoke делают одно и тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 17:42:29 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
Какая ирония. В коде действительно ошибка. Следовательно, вопрос остаётся открытым, потому как на тестах invokedynamic оказался до трёх раз медленнее не оптимизированного Reflection. Может действительно дело в JIT, который не умеет оптимизировать новую инструкцию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 21:13:52 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
Мне всегда казалось, что InvokeDynamic это новая команда byte-кода для JVM. Т.е. мне кажется, если вы хотите какое-то сравнение сделать, вам надо сделать сравнение именно байт кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 21:36:40 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
LeonidvМне всегда казалось, что InvokeDynamic это новая команда byte-кода для JVM. Т.е. мне кажется, если вы хотите какое-то сравнение сделать, вам надо сделать сравнение именно байт кода. Тема про MethodHandler. invokedynamic тут, действительно, не при чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2013, 22:51:15 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
Ну вообще MethodHandle позволяет задействовать инструкцию invokedynamic. Ну и меряем производительность этой инструкции, вроде как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 11:37:39 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
DoSOfRedRiverНу вообще MethodHandle позволяет задействовать инструкцию invokedynamic. Ткните нас, пожалуйста, носом в документацию где об этом написано. DoSOfRedRiverНу и меряем производительность этой инструкции, вроде как. Не только инструкции но и кучи другой инфраструктуры вокруг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 11:43:54 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczОК. Убедили. Походу не "убедили", а обманули. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 11:44:50 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
DoSOfRedRiver, На сайте http://groovy.codehaus.org можно найти интересную информацию по поводу invokeDynamic ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 11:46:40 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczDoSOfRedRiverНу вообще MethodHandle позволяет задействовать инструкцию invokedynamic. Ткните нас, пожалуйста, носом в документацию где об этом написано. Ну, это только предположение. ;) авторDoSOfRedRiverНу и меряем производительность этой инструкции, вроде как. Не только инструкции но и кучи другой инфраструктуры вокруг. Да. Но упирается всё в эту инструкцию. Или JIT оптимизации. Так кажется по результатом тестов моих, во всяком случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.03.2013, 11:47:52 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
Вообщем оказалось, что на самом деле для поддержки MethodHandle используется другая инструкция - invokevirtual. От invokedynamic почему то решили отказаться. Никакой "быстрой рефлексии" из MethodHandle не выйдет, во всяком случае до выхода Java 8. Судя по всему, инструкция invokedynamic Java в данный момент не поддерживается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 17:11:22 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
DoSOfRedRiverВообщем оказалось, что на самом деле для поддержки MethodHandle используется другая инструкция - invokevirtual. От invokedynamic почему то решили отказаться. Никакой "быстрой рефлексии" из MethodHandle не выйдет, во всяком случае до выхода Java 8. Не может быть! DoSOfRedRiverСудя по всему, инструкция invokedynamic Java в данный момент не поддерживается. Поддерживается. На уровне компилятора и байткода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 17:12:51 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПоддерживается. На уровне компилятора. В каким конкретно случаях? Есть ссылка на документацию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 17:28:45 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
DoSOfRedRiverВ каким конкретно случаях? Есть ссылка на документацию? http://docs.oracle.com/javase/7/docs/technotes/guides/vm/multiple-language-support.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 17:32:51 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Что-то я не вижу в доке ни единого намёка на invokedynamic. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 17:57:22 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
DoSOfRedRiverЧто-то я не вижу в доке ни единого намёка на invokedynamic. По-моему кто-то нарывается на грубость. Вот это вот что тогда: The invokedynamic InstructionThe invokedynamic instruction simplifies and potentially improves implementations of compilers and runtime systems for dynamic languages on the JVM. The invokedynamic instruction does this by allowing the language implementer to define custom linkage behavior. This contrasts with other JVM instructions such as invokevirtual, in which linkage behavior specific to Java classes and interfaces is hard-wired by the JVM. Each instance of an invokedynamic instruction is called a dynamic call site. A dynamic call site is originally in an unlinked state, which means that there is no method specified for the call site to invoke. As previously mentioned, a dynamic call site is linked to a method by means of a bootstrap method. A dynamic call site's bootstrap method is a method specified by the compiler for the dynamically-typed language that is called once by the JVM to link the site. The object returned from the bootstrap method permanently determines the call site's behavior. The invokedynamic instruction contains a constant pool index (in the same format as for the other invoke instructions). This constant pool index references a CONSTANT_InvokeDynamic entry. This entry specifies the bootstrap method (a CONSTANT_MethodHandle entry), the name of the dynamically linked method, and the argument types and return type of the call to the dynamically linked method. The following is an example of an invokedynamic instruction. In this example, the runtime system links the dynamic call site specified by this invokedynamic instruction (which is +, the addition operator) to the IntegerOps.adder method by using the bootstrap method Example.mybsm. The methods adder and mybsm are defined in the section The Challenge of Compiling Dynamically Typed Languages (line breaks have been added for clarity): invokedynamic InvokeDynamic REF_invokeStatic: Example.mybsm: "(Ljava/lang/invoke/MethodHandles/Lookup; Ljava/lang/String; Ljava/lang/invoke/MethodType;) Ljava/lang/invoke/CallSite;": +: "(Ljava/lang/Integer; Ljava/lang/Integer;) Ljava/lang/Integer;"; Note: The bytecode examples in these sections use the syntax of the ASM Java bytecode manipulation and analysis framework. Invoking a dynamically linked method with the invokedynamic instruction involves the following steps: Defining the Bootstrap Method Specifying Constant Pool Entries Using the invokedynamic Instruction invokedynamic instructionsA dynamic call site is originally in an unlinked state. In this state, there is no target method for the call site to invoke. Before the JVM can execute a dynamic call site (an invokedynamic instruction), the call site must first be linked. Linking is accomplished by calling a bootstrap method which is given the static information content of the call site, and which must produce a method handle that gives the behavior of the call site. Each invokedynamic instruction statically specifies its own bootstrap method as a constant pool reference. The constant pool reference also specifies the call site's name and type descriptor, just like invokevirtual and the other invoke instructions. Linking starts with resolving the constant pool entry for the bootstrap method, and resolving a MethodType object for the type descriptor of the dynamic call site. This resolution process may trigger class loading. It may therefore throw an error if a class fails to load. This error becomes the abnormal termination of the dynamic call site execution. Linkage does not trigger class initialization. The bootstrap method is invoked on at least three values: a MethodHandles.Lookup, a lookup object on the caller class in which dynamic call site occurs a String, the method name mentioned in the call site a MethodType, the resolved type descriptor of the call optionally, between 1 and 251 additional static arguments taken from the constant pool Invocation is as if by MethodHandle.invoke. The returned result must be a CallSite (or a subclass). The type of the call site's target must be exactly equal to the type derived from the dynamic call site's type descriptor and passed to the bootstrap method. The call site then becomes permanently linked to the dynamic call site. As documented in the JVM specification, all failures arising from the linkage of a dynamic call site are reported by a BootstrapMethodError, which is thrown as the abnormal termination of the dynamic call site execution. If this happens, the same error will the thrown for all subsequent attempts to execute the dynamic call site. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 18:12:55 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Прошу прощения, перепутал вкладку. Я тогда вообще не понимаю зачем нужен этот java.lang.invoke. Какой от него прок? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 18:55:47 |
|
||
|
Invokedynamic perfomance.
|
|||
|---|---|---|---|
|
#18+
DoSOfRedRiverЯ тогда вообще не понимаю зачем нужен этот java.lang.invoke. Какой от него прок? На сколько я понимаю, его должны использовать компиляторы таких языков как Scala и Groovy. Для программирования на Java эти классы не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2013, 19:01:00 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2129682]: |
0ms |
get settings: |
14ms |
get forum list: |
28ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
51ms |
get topic data: |
20ms |
get forum data: |
5ms |
get page messages: |
114ms |
get tp. blocked users: |
3ms |
| others: | 305ms |
| total: | 552ms |

| 0 / 0 |
