Какой сборщик мусора лучше использовать в Java для приложений?

Автор Олег, 06 марта 2025, 20:55

« назад - далее »

Олег

Какие типы сборщиков мусора подходят для разных сценариев? (Интересует пример подробный). Как правильно настроить параметры GC для минимизации пауз и повышения производительности в данном случае?

Кирилл

ZGC крут для low-latency задач. У меня приложение с кучей в 100 ГБ, и паузы меньше 10 мс. Но он требует Java 11+. А ты пробовал G1? Он тоже неплох для средних нагрузок.

AlexXC

Я использую G1, но паузы иногда до 200 мс. Может, я что-то не так настроил, пока разобраться не могу. Какие параметры GC лучше выставить для G1, чтобы уменьшить паузы?

Кирилл

Для G1 попробуй увеличить -XX:MaxGCPauseMillis=100 и -XX:G1NewSizePercent=30. Это может помочь. А ZGC я только тестирую, пока впечатления положительные.

Ярик6

А если нагрузка не критична, то Shenandoah тоже вариант. У него паузы небольшие, и он работает на Java 8+. Думаю, что это даже самый лучший вариант из всех.

AlexXC

Shenandoah не пробовал, но слышал, что он хорошо справляется с большими heap. И как насчет настройки -Xmx и -Xms? Их лучше выставлять одинаково или есть другие варианты?

Ярик6

Алек, да, -Xmx и -Xms лучше ставить одинаково, чтобы избежать динамического расширения heap. Это уменьшает паузы. А еще -XX:+UseStringDeduplication помогает экономить память.

AlexXC

А как ты борешься с фрагментацией памяти? У меня иногда из-за этого паузы увеличиваются. Но как устранить не могу понять  и причины тоже не вижу. Пару вариантов пробовал, но они не принесли плоды.

Кирилл

Я предпочитаю Grafana + Prometheus. Они дают детальную статистику по GC. А еще -Xlog:gc* помогает логировать все события сборки мусора. Рекомендую.

Олег

Спасибо за советы народ! Попробую настроить G1 с этими параметрами. Если не поможет, перейду на ZGC. Кто знает, как его правильно настроить? Было бы не плохо и это обсудить, чтобы были варианты.