Особенности реализации Java на процессоре «Эльбрус»

Процессор «Эльбрус» — российский процессор VLIW-архитектуры с повышенными требованиями к безопасности. JVM — сложная динамичная система, которая подразумевает определенную свободу в реализации и исполнении. Эти вещи всегда вступают в противоречие друг с другом.

В докладе я расскажу про:

  • особенности архитектуры и принципиальные отличия от x86,
  • портирование OpenJDKZero и реализации LLVMбэкенда для Эльбруса,
  • разработку VLIWкодогенератора, способного работать в условиях JITкомпилятора,
  • «сращивание» кодогенератора и Optoкомпилятора,
  • сборку мусора «напрямую» в регистрах процессора,
  • обработку исключений и деоптимизацию при закрытых адресах возврата,
  • неявные проверки границ массивов, а также про многое другое.

В результате слушатели узнают про подходы и нетривиальные решения, которые были применены при портировании JVM под «экзотическую» архитектуру, про то, каким образом использование, казалось бы, незначительных особенностей архитектуры может дать куда большее ускорение, нежели различные классические оптимизации, а также почему все говорят, что Эльбрус медленный, и насколько это является правдой.

Роман Артемьев и Сергей Андреенко, Унипро

Роман Артемьев и Сергей Андреенко, Унипро

Роман Артемьев, Унипро

Более трех лет занимается одновременно Java и Эльбрусом. За это время успел покопаться практически во всех частях Hotspot VM, изучить архитектуру, поучаствовать в написании нескольких динамических компиляторов. А количество багов, которые были обнаружены и исправлены уже не поддается исчислению. Просто обожает низкий уровень, нетривиальные решения, сложные задачи, а также делиться всем этим с другими.

Сергей Андреенко, Унипро

Занимается разработкой компиляторов 4 года. Начинал карьеру в Intel в командах Intel GT compiler и Intel Compiler Perfomance Team. Проходил стажировку в Microsoft в команде Phoenix compiler infrastructure и LLILC (LLVM based MSIL Compiler). Последние 2 года работает в компании Унипро над проектом JVM для Эльбруса. Разрабатывает и поддерживает внутри- и межблоковое планирование инструкций.