Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / invokeDynamic / 10 сообщений из 10, страница 1 из 1
08.08.2017, 18:25
    #39502057
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
invokeDynamic
читаю про invokeDynamic инструкцию и появляются вопросы.
https://habrahabr.ru/company/nixsolutions/blog/281513/ Начиная с версии 7 в Java появился на удивление полезный инструмент: байткод invokedynamic, призванный выполнять роль основного механизма вызова. Это позволяет исполнять динамические языки поверх JVM, а также расширять систему типов в Java путём добавления встроенных методов и изменения интерфейса, в то время как раньше это было невозможно. Расплачиваться за это приходится несколько возросшей сложностью. Но при умелом обращении invokedynamic является мощным инструменто.

До седьмой java не было динамических языков?

Как система типов java связана с invokeDynamic?
...
Рейтинг: 0 / 0
08.08.2017, 19:02
    #39502082
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
invokeDynamic
questionerДо седьмой java не было динамических языков?

Были. Но они работали через рефелексию в ряде ситуаций.

questionerКак система типов java связана с invokeDynamic?
В Java нужно знать конкретный тип и метод для того чтобы его вызвать уже на этапе компиляции. Это обходится только через рефлексию.
Динамические языки имеют кучу всяких фишек таких как duck typing. Которые в JVM можно было реализовать только через рефлексию. В то же время этим языкам никакой отдельный API для "рефлексии" не нужен. Теперь же возможноть вызвать метод "динамически" доступная и на уровне байт-кода. Её могут использовать компиляторы "динамических" языков. А подержка на уровне JVM позволяет оптимизировать эту операцию, например на уровне JIT, что через рефлексию было не возможно.
...
Рейтинг: 0 / 0
08.08.2017, 19:19
    #39502093
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
invokeDynamic
Я вот активно пользуюсь ScriptEngine...
И там есть опция типа скомпилировать...И тогда этот код уже предподготовлен(не знаю байт это код или нет)
Но дальше я уже пользуюсь предподготовленным.
...
Рейтинг: 0 / 0
08.08.2017, 19:22
    #39502098
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
invokeDynamic
irbis_alЯ вот активно пользуюсь ScriptEngine...
И там есть опция типа скомпилировать...
Тут?
https://docs.oracle.com/javase/8/docs/api/javax/script/ScriptEngine.html

irbis_alНо дальше я уже пользуюсь предподготовленным.
Отлично объяснил invokeDynamic. Стало сразу понятно.
...
Рейтинг: 0 / 0
09.08.2017, 11:14
    #39502411
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
invokeDynamic
BlazkowiczВ Java нужно знать конкретный тип и метод для того чтобы его вызвать уже на этапе компиляции. Это обходится только через рефлексию.
Динамические языки имеют кучу всяких фишек таких как duck typing. Которые в JVM можно было реализовать только через рефлексию. В то же время этим языкам никакой отдельный API для "рефлексии" не нужен. Теперь же возможноть вызвать метод "динамически" доступная и на уровне байт-кода. Её могут использовать компиляторы "динамических" языков. А подержка на уровне JVM позволяет оптимизировать эту операцию, например на уровне JIT, что через рефлексию было не возможно.

Я немножко не понимаю. А если у нас @Override, то на этапе компиляции мы ведь не знаем какой именно метод вызывать и это решается на этапе выполнения?
...
Рейтинг: 0 / 0
09.08.2017, 11:38
    #39502431
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
invokeDynamic
questionerЯ немножко не понимаю. А если у нас @Override, то на этапе компиляции мы ведь не знаем какой именно метод вызывать и это решается на этапе выполнения?
Это немного не то. Это виртуальный вызов. Мы всё равно строго привязаны к типу базового метода.
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.invokevirtual
...
Рейтинг: 0 / 0
09.08.2017, 11:51
    #39502448
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
invokeDynamic
Blazkowicz,

http://www.truehackers.ru/articles/programming/3662-java-7-hello-dynamics Как вы знаете, байт-код Java не поддерживает динамического вызова методов. Первым позывом к поддержке динамики в языке стал JSR 223 (Scripting for the Java Platform). Данная спецификация определяла API для вызова Java кода из кода, написанного на динамическом скриптовом языке. Собственно, JSR 223 был реализован в JDK 6, и включен в состав Java SE 6. Однако, разработчикам подобных скриптовых конструкций пришлось испытать немало головной боли, так как байт-код сам по себе был разработан только для статических языков.

Он включает в себя три возможных способа для вызова метода:
invokestatic
invokespecial
invokeinterface или invokevirtual

а как до 6 джавы виртуальные методы работали? не было же инструкции invokevirtual
...
Рейтинг: 0 / 0
09.08.2017, 12:08
    #39502466
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
invokeDynamic
questionerа как до 6 джавы виртуальные методы работали? не было же инструкции invokevirtual
Ну, как-то работали. Других инструкций что ли не было?
...
Рейтинг: 0 / 0
09.08.2017, 12:43
    #39502502
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
invokeDynamic
Blazkowiczquestionerа как до 6 джавы виртуальные методы работали? не было же инструкции invokevirtual
Ну, как-то работали. Других инструкций что ли не было?
То есть появление invokeVirtual инструкции также как и invokeDynamic это тоже некий способ оптимизации?
...
Рейтинг: 0 / 0
09.08.2017, 13:03
    #39502523
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
invokeDynamic
questionerТо есть появление invokeVirtual инструкции также как и invokeDynamic это тоже некий способ оптимизации?
Похоже мы просто не верно интерпретировали статью. invokeVirtual не является частью JSR 223.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / invokeDynamic / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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