Практичний розбір того, чому Java‑застосунок може мати витоки пам’яті та пригальмовувати: забуті слухачі (
addActionListener/
removeActionListener), «вічні» статичні колекції, незакриті ресурси (порада:
try-with-resources), анонімні/внутрішні класи, що утримують посилання, і зловживання
System.gc(). Навчимося читати логи GC (
-Xlog:gc*,
-XX:+PrintGCDetails), підбирати збирач, будувати кеші на
WeakHashMap, здійснювати моніторинг (
jvisualvm,
jconsole), аналізувати heap dump і правильно налаштовувати
-Xmx/
-Xms. Наприкінці — реальні приклади витоків і їх виправлення.