1.* Як правильно обрати збирач сміття

Якщо у твого застосунку нема суворих вимог до часу затримки, тобі варто просто запустити програму і залишити вибір правильного збирача самій JVM.

Найчастіше налаштування за замовчуванням добре працюють. У разі необхідності можна налаштувати розмір купи для підвищення продуктивності. Якщо продуктивність, як і раніше, не відповідає очікуванням, спробуй змінити збирач відповідно до вимог твоєї програми.

  • Послідовний. Якщо у додатку невеликий набір даних (приблизно до 100 МБ), та/або він працюватиме на одному процесорі без будь-яких вимог до часу затримки.
  • Паралельний. Якщо пріоритет – пікова продуктивність програми, і вимоги до часу затримки відсутні (або допустимі паузи в секунду і більше).
  • CMS/G1. Якщо час відгуку важливіший за загальну пропускну здатність, і паузи при складанні сміття повинні бути коротшими за одну секунду.
  • ZGC. Якщо в часі відгуку високий пріоритет та/або задіяна дуже велика купа.

2.* Рекомендації щодо збирання сміття

Уникай ручних тригерів

Окрім основних механізмів складання сміття, один із найважливіших моментів щодо цього процесу в Java – недетермінованість. Тобто неможливо передбачити, коли саме під час виконання вона станеться.

За допомогою методів System.gc() або Runtime.gc() можна включити до коду підказку для запуску збирача сміття, але це не гарантує, що він дійсно запуститься.

Використовуй інструменти для аналізу

Якщо у тебе недостатньо пам'яті для запуску програми, ти зіткнешся з уповільненнями, тривалим часом збору сміття, подіями “зупинки світу” та рештою помилок через брак пам'яті. Можливо, це вказує на те, що купа занадто мала, але також може означати, що в застосунку стався витік пам'яті.

Ти можеш звернутися по допомогу до інструменту моніторингу. Наприклад, jstat або Java Flight Recorder і побачити, чи зростає використання купи нескінченно, що може вказувати на помилку в коді.

Віддавай перевагу налаштуванням за замовчуванням

Якщо у тебе невеликий автономний Java-застосунок, тобі, швидше за все, не знадобиться налаштовувати складання сміття. Налаштування за замовчуванням чудово тобі послужать.

Використовуй прапори JVM для налаштування

Найкращий підхід до налаштування збирання сміття в Java – встановлення JVM-прапорів. За допомогою прапорів можна вказати збирач сміття (наприклад, Serial, G1 тощо), початковий та максимальний розмір купи, розмір розділів купи (наприклад, Молодого покоління, Старшого покоління) та багато іншого.

Обирай збирач правильно

Хороший орієнтир у плані початкових налаштувань — характер програми, що налаштовується. Наприклад, паралельний збирач сміття ефективний, але найчастіше викликає події “зупинки світу”, а отже він більше пасує для внутрішньої обробки, де допустимі тривалі паузи.

Водночас, збирач сміття CMS призначений для мінімізації затримок, тож він ідеально підходить для вебзастосунків, де важлива швидкість реагування.