В нативный код из уютного мира Java: Путешествие туда и обратно

День 1 /  / Зал 3  /  RU /

Все мы любим Java и другие управляемые языки, но иногда их бывает просто недостаточно. Нужен доступ к библиотеке машинного обучения, написанной исключительно на С? Или всего-то хочется позвать небольшой метод из OS API? А может, для одного из модулей вы хотите получить большую производительность, чем вы когда-либо сможете выжать из Java? Тогда вам прямой путь в нативный код!

Вроде все просто — пишем нативный метод, загружаем библиотеку, вызываем, и дело в шляпе! Но вот беда: JVM начала крашиться в случайных местах, производительность упала ниже прежнего, а ваш репозиторий заполонили бесконечные сишные файлы, испещренные буквами J-N-I. Что же пошло не так?

В докладе разберемся со всем по порядку: что необычного в интеропе между Java и нативным кодом, и какая у него история; как работать с нативным кодом прямо сейчас, чтобы избежать сегфолтов, просадки производительности, внезапных OOM; наконец, что же нас ждет в будущем в контексте таких проектов, как Panama и Sulong, и будет ли после них вообще смысл говорить про какой-то интероп.



Иван Углянский
Huawei

Работал в компании Excelsior c 2011 года, являлся одним из разработчиков Excelsior JET: сертифицированной реализации Java SE, основанной на оптимизирующей AOT-компиляции.

В основном занимался рантаймом: GC, загрузка классов, поддержка многопоточности, профилирование и т. д. Кроме того, поддерживал плагин для отладки JET-compiled приложений в GDB и иногда писал посты в Excelsior JET Team Blog.

Также является одним из основателей и лидеров JUGNsk — официальной Java User Group в Новосибирске, организовывает Java-митапы и другие мероприятия.

В качестве хобби преподает в НГУ курсы по C/C++.