Например, если где-то в коде определить статический список:
private static final List<byte[]> byteList = new ArrayList<>();
Некоторые участки программы могут продолжать добавлять элементы в этот список, не удаляя их, что в итоге приведёт к исчерпанию памяти
Помимо анализа кода на наличие возможных утечек, можно использовать слабые ссылки вместо сильных.
Примером может служить класс
WeakHashMap<K, V>Он позволяет сборщику мусора удалять объекты, на которые больше нет сильных ссылок, даже если они всё ещё находятся в карте.
👉 Java Portal