Верификация Java байт-кода: когда, как, а может отключить?

День 2 /  / Зал 3  /  RU / Хардкор. Сложный низкоуровневый доклад, требующий от слушателя знаний технологии.

Сегодня Java разработчики все чаще используют библиотеки для порождения Java байт-кода в рантайме. Делается это для эффективной реализации различных трюков, которые сложно или невозможно выразить на языке Javа. Когда используется Java, компилятор javac гарантирует, что на выходе получится корректный Java байт-код. Но, спускаясь на уровень непосредственно байт-кода, часто нужно самостоятельно следить за его корректностью. Иначе при загрузке порожденных классов на выходе будет j.l.VerifyError, потому что JVM посредством верификатора Java байт-кода строго следит за корректностью байт-кода, который она загружает. Таким образом, порождая байт-код, недостаточно просто знать семантику байт-кодных инструкций — нужно также знать, как работает Java byte-code верификатор, какой байт-код он считает корректным, а какой нет.

В этом докладе Никита поможет слушателям разобраться, какую миссию в JVM несет верификатор байт-кода, когда и как он работает, может ли повлиять на производительность вашего приложения и почему опасно его отключать.


Скачать презентацию
Никита Липский
Excelsior

Один из инициаторов и руководителей проекта Excelsior JET — сертифицированной реализации Java SE, разрабатываемой компанией Excelsior. Работает над проектом с 1997 года и в это время поучаствовал в исследовании и разработке практически всех компонентов продукта, от ядра до продуктовых свойств. Никита — один из авторов поддержки OSGI на уровне JVM в Excelsior JET, технологии Java Runtime Slim Down — модуляризации Java SE, реализованной в Excelsior JET с 2007 года, обоих Java байткод-верификаторов в Excelsior JET и много другого.

Наши контакты