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

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

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

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

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

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

Я немножко не понимаю. А если у нас @Override, то на этапе компиляции мы ведь не знаем какой именно метод вызывать и это решается на этапе выполнения?
...
Рейтинг: 0 / 0
invokeDynamic
    #39502431
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerЯ немножко не понимаю. А если у нас @Override, то на этапе компиляции мы ведь не знаем какой именно метод вызывать и это решается на этапе выполнения?
Это немного не то. Это виртуальный вызов. Мы всё равно строго привязаны к типу базового метода.
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.invokevirtual
...
Рейтинг: 0 / 0
invokeDynamic
    #39502448
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
invokeDynamic
    #39502466
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerа как до 6 джавы виртуальные методы работали? не было же инструкции invokevirtual
Ну, как-то работали. Других инструкций что ли не было?
...
Рейтинг: 0 / 0
invokeDynamic
    #39502502
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczquestionerа как до 6 джавы виртуальные методы работали? не было же инструкции invokevirtual
Ну, как-то работали. Других инструкций что ли не было?
То есть появление invokeVirtual инструкции также как и invokeDynamic это тоже некий способ оптимизации?
...
Рейтинг: 0 / 0
invokeDynamic
    #39502523
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerТо есть появление invokeVirtual инструкции также как и invokeDynamic это тоже некий способ оптимизации?
Похоже мы просто не верно интерпретировали статью. invokeVirtual не является частью JSR 223.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / invokeDynamic
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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