Комментарии 9
Интересно было рассмотреть, как реализуются в байт-коде замыкания
+1
Как-как. Делается обычный класс. Даже не вложенный (потому что inner classes никак особо не поддерживаются в JVM, просто используется соглашение на именование класса и его полей). Переменные, которые замыкание вытаскивает из вышестоящего контекста, преобразуются в поля данного класса. Внутри замыкания при обращении к этим переменным реально вытягиваются значения полей. При создании замыкания после собственно создания экземпляра класса его полям дополнительно присваиваются значения переменных, выхваченных из контекста. Т.е. это даже не фича JVM.
+8
Чуть ли не самое лучшее описание байткода JVM, которые я видел, содержится в документации по ASM (http://download.forge.objectweb.org/asm/asm-guide.pdf). Кстати, эта библиотека, на мой взгляд, на порядок лучше BCEL, особенно, если нужно просто сгенерить класс из пустого места (а не трансформировать имеющийся). Кроме того, в ASM есть свой валидатор байткода, поддерживающий все фичи последних JVM. В BCEL тоже есть, но там поддерживается только несколько устаревшная спецификация из The JavaTM Virtual Machine Specification. И код в BCEL генерить неудобно, особенно переходы вперёд по коду.
Кстати, никто не знает, почему более поздние версии байткода не задокументированы публично? Ведь это должно быть частью спецификации, а она, по идее, открыта.
Кстати, никто не знает, почему более поздние версии байткода не задокументированы публично? Ведь это должно быть частью спецификации, а она, по идее, открыта.
+6
«ложит»
такая хорошая статья и так одним словом перечеркнулась :(
такая хорошая статья и так одним словом перечеркнулась :(
0
Мне интересно как происходит проверка байт-кода на корректность(валидность). Сколько этапов и какие? При первой загрузке класса загрузчиком?
Какие параметры байт-кода проверяются?
В примерах видны goto-переходы, интересно проверяются ли они каким-либо образом?
Безусловно полезная статья для понимания принципов работы среды и компилятора, но она также полезна и злоумышленникам.
Это я к тому, а сможет ли злоумышленник изменить байт-код и при этом он пройдет все проверки? Или цифровая подпись спасает?
Какие параметры байт-кода проверяются?
В примерах видны goto-переходы, интересно проверяются ли они каким-либо образом?
Безусловно полезная статья для понимания принципов работы среды и компилятора, но она также полезна и злоумышленникам.
Это я к тому, а сможет ли злоумышленник изменить байт-код и при этом он пройдет все проверки? Или цифровая подпись спасает?
0
+1
Ссылка на оригинальную статью Java Bytecode Fundamentals: arhipov.blogspot.com/2011/01/java-bytecode-fundamentals.html
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Java Bytecode Fundamentals