Загрузчики классов и инструментация байткода

Встреча JUG.ru c Антоном Архиповым (ZeroTurnaround) в Санкт-Петербурге 07.08.2014. Состояла из двух частей:

Загрузчики классов в Java: коллекция граблей

Модель динамической загрузки классов является одной из основных особенностей платформы Java. Загрузчик классов позволяет загружать исполняемый код в JRE не перезагружая основное приложение. Сервера приложений, модульные системы, многие веб-фреймворки используют загрузчики классов для внесения динамических особенностей в свою функциональность.

В этом докладе рассмотрены основные положения в механизме загрузки классов, а так же основные проблемы, возникающие в приложениях из-за особенностей поведения загрузчиков. Рассмотрены причины возникновения типичных ошибок ClassNoDefFoundError, IncompatibleClassChangeError, LinkageError и других, а так же способы диагностики и пути к решению этих ошибок. Доклад подразумевает интерактив и вовлечённое участие аудитории.

Java-агенты, Instrumentation API и Javassist

Пакет java.lang.instrument был добавлен в Java уже давно, в версии 1.5. На простых примера рассмотрены основные возможности Instrumentation API и разобрано, как и для чего можно сделать своего Java-агента. Картинка была бы неполной без упоминания инструментов для манипуляций с байткодом — рассмотрены возможности Javassist, чтобы увидеть, что с этим со всем можно сделать.