LINUX.ORG.RU
решено ФорумTalks

Альтернативные Java VM

 , ,


0

3

Тут свежие плагины eclipse потребовали Java 11 минимум.
На сайте Оракла надо регистрироваться, нашёл https://adoptopenjdk.net/
А у них есть OpenJ9 вместо HotSpot.

Фороникс пишет, что очень медленная. Но мы же помним, что Фороник - это которые FreeBSD тестируют на установочном ядре (которое бывало однопроцессорное, без сопроцессора, с минимальными кешами и вообще тормоз только для установки на экзотическое железо).

Добавил в eclipse.ini

-Xshareclasses
-Xscmx100m


и в результате:
- памяти ест в 2-3 раза меньше
- после довольно быстрой загрузки поначалу (минут 30) подтормаживает и лагает в неожиданных местах
- спустя какое-то время перестаёт тормозить, всё шустро
- почему-то спеллчекер больше не влияет на скорость

Умные люди, объясните, почему так? И почему вы ещё не используете OpenJ9?

★★★★★

Последнее исправление: Shadow (всего исправлений: 1)

Боятся брать ответственность, так то если что «Оракл+тормозит+дырявая»

Shulman
()

И почему вы ещё не используете OpenJ9?

Мы много чего используем, и HotSpot, и GraalVM, и Zing. В зависимости от задач. J9 тоже когда-то давно использовали, когда оно ещё IBM было. Для обычных юзеров HotSpot’а хватит за глаза.

cocucka ★★★★☆
()

И вообще, я васянам с adoptopenjdk не доверял бы. Мало ли кто там что собирает. Я как-то азуловцам больше доверяю. Оракал же со своей лицензией поднасрал.

cocucka ★★★★☆
()
Последнее исправление: cocucka (всего исправлений: 1)
Ответ на: комментарий от Shadow

Это не замена JDK, это альтернативный инструмент. Произвольный Java-код в нём не заработает, нужна адаптация кода и библиотек.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Это не замена JDK, это альтернативный инструмент.

Шта? Он полностью совместим с JVM спецификацией. Можно запускать приложения как обычно, без специальной подготовки. Для native image, да, может что-то придётся подправить.

Any JVM-based application that runs on Java HotSpot VM can run on GraalVM. GraalVM is based on Java HotSpot VM, but integrates an advanced just-in-time (JIT) compiler, written in Java - the GraalVM compiler. At runtime, the application is loaded and executed normally on the JVM. The JVM passes bytecode to the GraalVM compiler, which compiles that to the machine code and returns it to the JVM.
cocucka ★★★★☆
()

после довольно быстрой загрузки поначалу (минут 30) подтормаживает и лагает в неожиданных местах

А пробовали какие-нибудь настройки памяти и GC у джавы теребить ?

DawnCaster ★★
()
Ответ на: комментарий от DawnCaster

У этой - нет, у OpenJDK особых заметных результатов не замечал.
И ко мне можно на «ты».

Shadow ★★★★★
() автор топика
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Лучше 30 минут потормозить (я так понял, это тот самый AOT и Class data sharing), а потом летать, чем внезапно фризиться в непонятное время.

Shadow ★★★★★
() автор топика
Ответ на: комментарий от peregrine

и вообще 15 на дворе

Я ж не java погромист, и даже не kotlin.
Какой мне с неё профит в старом софте, написанном под 8-ю жаву???

Shadow ★★★★★
() автор топика
Ответ на: комментарий от peregrine

ничего что это не openjdk и вообще 15 на дворе?

А ничего, что 9 в J9 это не версия явы? Да и JDK != JVM. OpenJ9 это реализация JVM, которую можно впихнуть в поставку OpenJDK как альтернативную JVM.

cocucka ★★★★☆
()
Ответ на: комментарий от Shadow

Когда тормозит в начале, а потом перестает, то это JIT оптимизации. А AOT должен уже при первой компиляции все оптимизировать.

cocucka ★★★★☆
()
Ответ на: комментарий от Shadow

Class Data Sharing ты можешь использовать и в OpenJDK так-то. Ключи похожие.

Но потом ты обновишь какой-нибудь плагин из эклипс маркетплейса, и будешь снова 30 минут ждать

А потом обновится сама эклипса (из пакетов, или ты новую с сайта скачал), и снова 30 минут ждать

А оно обновляется-то каждый день, а то и по нескольку раз. Ну, смотря что ты там используешь, конечно

чем внезапно фризиться в непонятное время.

Сколько у тебя гигабайт оперативной памяти, и сколько из них ты отдал эклипсу?

Запустись на 64-битной жабе, отдай гига четыре хотя бы, ничего не будет фризиться

Можешь в качестве GC попробовать использовать Shenandoah или ZGC, если уж прям сильно бепокоит

stevejobs ★★★★☆
()
Ответ на: комментарий от cocucka

Когда тормозит в начале, а потом перестает, то это JIT оптимизации. А AOT должен уже при первой компиляции все оптимизировать.

Тормозит вначале потому, что в J9 при включении CDS автоматически включается и AOT тоже. Оно выполняется при первом старте приложения с этими флагами, поэтому тормозит как раз из-за того, что AOT-компиляция и дамп миллионов классов (Эклипса огромная) сожрали все ресурсы компутера

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Можешь в качестве GC попробовать использовать Shenandoah или ZGC, если уж прям сильно бепокоит

Тут поподробнее.

peregrine ★★★★★
()
Ответ на: комментарий от stevejobs

Спасибо за объяснение механики!
Очень интересно.

PS. У меня мало оперативки, но и обновляю я плагины/эклипс вручную не чаще раза в месяц.

Shadow ★★★★★
() автор топика
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от peregrine

Что-то из этого:

JAVA_OPTS="$JAVA_OPTS -XX:+UnlockExperimentalVMOptions -XX:+UseZGC"

JAVA_OPTS="$JAVA_OPTS -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC"

Для Shenandoah нужен AdoptOpenJDK, для ZGC - Oracle OpenJDK. Скчать можно с моего сайта: https://jdk.dev (рекламная пауза)

Ну или прописать эти флаги в строчку для запуска java.exe, в зависимости от того, как ты ее там запускаешь.

Например, в Eclipse настройки лежат в eclipse.ini, надо каждую из них дописать в самый конец, на отдельной строке (и не забыть последнюю строку сделать пустой, иначе их быдлокодерский читатель этого файла не прочитает последнюю строчку, лол).

В целом, я вижу тут две проблемы:

  • У них могут быть какие-то ограничения на минимальный размер RAM. Я когда-то пробовал их использовать на 16G помойму, поэтому я эти ограничения не видел. А вот на 2G может оказаться, что эти GC просто не работают (потому что заточены на работу с терабайтами памяти и 2G это не то чтобы самый важный случай для них). Тут уже вам самостоятельно нужно разобраться

  • Я слышал от людей, что они пробовали эти GC то ли с Эклипсой, то ли с Идеей, и перформанс стал даже хуже. В смысле, у них и так ничего никогда не фризилось, и со включением этой штуки ничего не фризится. Тут разницы никакой и нет. А вот процессора стало тратиться больше, потому что этим штукам же надо на чем-то работать :)

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от Shadow

Лучше 30 минут потормозить (я так понял, это тот самый AOT и Class data sharing), а потом летать, чем внезапно фризиться в непонятное время.

Лол, вот он какой трейдоф настоящего джависта. Записал к себе в вики.

pon4ik ★★★★★
()

С ZGC, опеждк существенно меньше памяти начинает жрать. Тестил на огромной HashMap. Но так и быть надо дать шанс и опежэ9.

foror ★★★★★
()
Ответ на: комментарий от stevejobs

Стиви, когда там уже можно скомпилить сырцы 16 джавы под ios и android из коробки? Года три назад же обещали. Вон и ИностраннаяПамять уже на подходе, а под андроид по прежнему на джаве 6 только писать…

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 2)
Ответ на: комментарий от unstable-case

Года три назад я ушел работать журналистом, потом маркетологом. Помогаю популяризировать всякие IT решения. Этим летом была возможность начать пиарить OpenJDK. И хотя я и так этим занимался уже некоторое время, я критически посмотрел на всё это и отрефакторил свою жизнь в другую сторону. Теперь я пиарю эээ.. инструменты для разработки больших данных, а к разработке JDK не имею нкиакого отношения.

stevejobs ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.