JAVA

индекс
156,47

JavaOne: слияние Java

Как вы все знаете, вчера прошел первый день долгожданного JavaOne. Стоить заметить, что в Москве данное мероприятие проходит впервые, чему я несказанно рад. Было много разных интересных и полезных докладов, но всех больше мне понравилась секция про слияние HotSpot и JRockit. Во-первых, я мало что знал про JRocket, во-вторых, эту новость я слышал впервые, а в докладе было довольно много подробностей. Презентации выложат на официальном сайте мероприятия только через две недели, поэтому я все таки решил пересказать услышанное в вольном исполнении. Тем более по комментариям к одному из моих предыдущих постов, я так понял, что на хабре не очень много людей знакомых с JRockit, так что, думаю, топик будет интересен хабрасообществу.
image

Причина слияния HotSpot и JRockit


Данное решение обусловлено сокращением издержек. Oracle заметил, что требования клиентов к обоим JVM в общем-то совпадают и пользователи хотят видеть одинаковые вещи в обоих продуктах. Для достижения этих целей разработчики обеих JVM независимо приходят к реализации одних и тех же идей, например, EscapeAnalysis и предсказуемый сборщик мусора (Garbage First у HotSpot и Deterministic GC у JRockit). Так зачем же спрашивается дублировать работу?

Какую JVM взять за основу?


Каждое решение имеет свои сильные и слабые стороны. На данный момент сильными сторонами HotSpot можно считать широкую область использования, большую клиентскую базу, высокую отказоустойчивость и производительность. JRockit же выделятся своей оптимизацией под стек продуктов Oracle на Linux и Windows, наличия soft real-time решения и версии для запуска на голом железе без операционки (конечно же на специальном железе, а не произвольном).

На удивление были долгие дискуссии какую же JVM взять за базу. В итоге было принято решение в пользу HotSpot, но аргументы были не техническими. Причинами послужили существование OpenJDK, сделанной на основе HotSpot, количество инженеров работающих над HotSpot (инженеры работающие на JRockit будут реализовывать фичи своего детища в новой общей JDK), лицензии выданные IBM, HP и другим компаниям на модификацию HotSpot. Есть и грустная новость — не весь мерж попадет в OpenJDK. Первые результаты объединения можно будет уже увидеть в Java 7. Например, там уже планируется перевести PermGen на C-heap. Закончить всю работу по слиянию планируется в течении двух лет.

Требования к современной виртуальной машине


Какие требования предъявляются к современной виртуальной машине? Первое — масштабируемость. Виртуальная машина должна работать на большом спектре машин — от мобильников до мэйнфреймов, давать возможность работы с большими объемами памяти, эффективно работать на большом количестве аппаратных потоков (~10000) и учитывать топологию памяти. Второе — скорость. Виртуальная машина должна быть высокопроизводительной, предсказуемой (JIT, GC), быстро стартовать и иметь маленькие накладные расходы (footprint).

Последние новинки и оптимизации HotSpot


NUMA аллокация. Позволяет создавать объект в памяти ближе к тому процессору, на котором происходит работа. Так как вероятность, что поток создавший объект и будет с ним работать больше, то профит на лицо. Различные тесты показали прирост производительности от 25 до 300%.

Оптимизация работы со строками. Не для кого не секрет, что различные приложение очень много работают со строками, если и не на прамую, то различные библиотечные методы все равно их создают. Например были сделаны такие оптимизации как слияние строк (-XX:+OptimizeStringConcat), копирование строк, сжатие строк (-XX:+UseCompressedStrings, доступно только в 6u21p, потом отключили), которое позволяет хранить символы в массиве байтов, если возможно, а так же кэширование строк (XX:+UseStringCache).

Сжатые указатели. Включается автоматически, если JVM решит, что это даст профит. Но можно включить и с помощью параметра -XX:+UseCompressedOops. Данное сжатие происходит за счет сдвигов, которые помагают сократить место теряющиеся при выравнивании. С данной опцией можно работать с памятью до 32 Гб. Говорят, что работает даже быстрее чем 32-битная JVM.

Garbage Firts. Начиная с версии 6u14 можно включить параметром -XX:+UseG1GC. Данный сборщик уже работает весьма стабильно, но еще не закончен, так как остались небольшие проблемы с производительностью (случаются спайки).

Ступенчатая компиляция. Для того чтобы иметь быстрый startup, JVM запускается с клиентским JIT компилятором, после некоторого времени компилятор меняется на серверный.

Ну и конечно же уже столько раз обмусоленный EscapeAnalysis и более эффективное копирование массивов.

Преимущества JRockit


На фронте JRockit можно выделить надежность и предсказуемость. Использование модели согласованного прерывания потоков. Мощный JIT компилятор. API для тестирования плюс набор хорошо покрывающих тестов (HotSpot этого очень не хватает на сколько я знаю). Сэмплирующий компилятор.

В JRockit присутствует очень мощный инструментарий для поддержки и отладки. Можно выделить наличие так называемого «бортового самописца», который записывает все что происходило с JVM и расшифровка которого поможет разобраться при наступлении нестандартной ситуации. Для мониторинга текущего состояния существует такой тул как Mission Control, который выглядит заметно по-мощнее чем Visual VM для HotSpot. Так же есть возможность отслеживать нативную память и делать тонкую настройку JIT. В режиме сжатия указателей JRockit может адресовать уже 64гб. Сборщик мусора в среднем занимает на 30% меньше чем у HotSpot.

Какую из своих JVM Oracle рекомендует использовать сейчас?


Если вы работаете со стеком Oracle на Linux или Windows, то Oracle рекомендует использовать JRockit. Во всех остальных случаях — HotSpot.

Какой функционал будет перенесен?


Oracle хочет сделать доступным Mission Control для новой объединённой JVM. Переделать PermGen на нативную память (C-heap). Сделать ввод-вывод без копирования, для чего нужно будет реализовать механизм запрещения перемещения объектов GC находящихся в определенной фазе обработки. Сделать API для управления сборщиком мусора и компилятором. Добавить возможность работы с фрагментированной памятью. Сделать возможность запуска на голом железе. Ну и конечно же улучшение сборщика мусора в плане предсказуемости пауз.

Перспективы развития объединенной JVM


На объединение Oracle останавливаться не намерен, и в некоторой перспективе мы можем надеяться увидеть NUMA extreme, как дальнейшее развитие заботы с NUMA. Еще более предсказуемый G1. Возможность запуска нескольких приложений в одной JVM с опциональной возможностью эффективного взаимодействия. Эргономика на исторических данных и предварительная компиляция. Идея в том чтобы при запуске приложения использовать данные собранные при предыдущих запусках и работы приложения. Еще планируется работа над возможностью эффективного использования JVM в кластере/облаке, когда ресурсы выделяемые JVM могут изменятся. Так же рассматривается возможность поддержки гетерогенных процессоров GPU.

В заключении докладчик показал стандартный слайд на котором говорилось, что все сказанное является текущими планами Oracle, которые могут поменяться, и что они ничего не обещают. А еще порекомендовал ссылку на блог сотрудника Oracle, отвечающего за стратегию развития JVM.
+40
13 апреля 2011, 09:40
19

комментарии (17)

+3
pyatigil #
Ну, допустим, слить-то их давно собирались. Интереснее, какая часть результата останется бесплатной. Будет ли тот же MissionControl доступен всем?
0
javaspecialist #
Вряд ли, думаю самые вкусные вещи будут платными. Не зря же они не все будут в OpenJDK коммитить.
+1
javaspecialist #
Сегодня попытался прояснить этот вопрос на стенде. Четких планов пока нет. Общая идея, что фичи полезные для ентерпрайз приложений будут платными. Среди них управление jvm через окакл менеджемент тул, возможность работы jvm на кластере с терабайтами памяти и др.
0
pyatigil #
Ой, ну и хрен с ними. На словах oracle management tool я непроизвольно вздрогнул — вот уж чем я готов пожертвовать неглядя. А вот работа на кластере это любопытнее.
0
Zorkus #
А зря вздрогнули. Тут же Oracle Grid Control, например, отличный инструмент в своей области.
+2
Sauron #
> JRocket
Правильно — JRockit. Замените по всему тексту.
–1
6uxou #
А и так и так не плохо, стильно так :)
0
mgarin #
Эх, планы планы… Надеюсь, они таки дозреют до выпуска новой версии в скором времени.
Хотя, конечно, сам список их планов достаточно внушающий. Хорошо если команда разработки его потянет в адекватные сроки.
0
javaspecialist #
На пленарном докладе они признали что выход семерки сильно затянули. Рассказывали о том что только из-за перехода сана под управление оракла они затормозили на год. Но теперь оракл инвестирует в java и разработчики jrockit и hotspots теперь будут работать вместе. Сказали что фичи будут появляться постепенно, а полный прцесс займет не меньшу 2х лет.
0
GUIMachine #
Что же, будем надеяться, что в скором времени они нагонят упущенное.
Честно говоря я даже не против буду заплатить за некоторые интересные вещи, если они таки переведут Java на платную/бесплатную основы. Главное, чтобы они не отставали от прогресса на пару поколений.
+2
fealaer #
Сегодня пообщался с ребятами со стойки Java Performance, которые делали доклады анонсированные на хабре, и в процессе разговора задал вопрос, наверное не самый этичный, «Что изменилось в разработке Java, после того как Oracle купил Sun?». Ответ был примерно следующим (вольный пересказ): «Когда мы работали в Sun, ощущалась некоторая вялость в процессе разработки, у Sun не было такого маркетинга и мотивации. Oracle же нацелена на результат. По этой причине вольностей для разработчиков стало сильно меньше, есть четкие цели и сроки, в итоге продуктивность повысилась.». Так что будем надеяться вместе с Вами.
0
gvsmirnov #
Мда, на Java Tech Day в Питере уже рассказывали ровно это же. Хотя могли и что-нибудь новенькое добавить за это время.
0
Beholder #
Попробую в eclipse.ini дописать
-XX:+UseCompressedStrings
-XX:+UseStringCache
-XX:+OptimizeStringConcat
посмотрим, что получится…
(G1 уже давно включён)
0
javaspecialist #
Ну вообще они G1 рекомендуют для пртложений с кучей от 8G
0
nekoval #
Перегон PermGen — вещь полезная, а вот зачем им сдалась NUMA, я не понял. Неужели реально много инсталляций на таких системах?
0
javaspecialist #
Может на декстопах и не много, но на многопроцессорных серверах уже достаточно. У нас как минимум половина. Позволю себе цитату на аглийском: «So if you're asking yourself if you should care about NUMA, two examples of Sun servers with NUMA architectures are the Sun Sparc E6900 and the AMD Opteron X4600. Sun's early chip multithreading (CMT) boxes (T1000, T2000, T5120 and T5220) are not NUMA, but the later CMT T5140 and T5240 are.» Причем это далекий 2008 год.
0
nekoval #
Я посмотрел спеки, забавные сервера. Тот же Sun X4600Ж: Sun нигде не декларирует, что это NUMA, возможно, особенно не хотят афишировать, что для 8-процессорного сервера они решили сэкономить на контроллере памяти )))))

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.