Здесь нет утечки памяти.
Простое создание объекта или массива и последующее удаление его ссылки «на полу» не приводит к утечке памяти. Сборщик мусора обнаружит, что объект / массив более недоступен и удалит его. Это не произойдет сразу, но произойдет до того, как вашему приложению не хватит памяти.
В Java утечка памяти происходит, когда объекты все еще достижимы, и их не должно быть. ГХ не знает, что объекты больше не будут использоваться, и просто хранит их.
Например, если вы храните список всех этих массивов в ArrayList
, на который ссылается переменная static
. Сборщик не может знать, нужны ли эти объекты (действительно) вашей программе. Так как они достижимы, они сохраняют их. Если вы продолжаете делать это, у вас заканчивается память.
Если вы получаете OOME с этой программой, это не связано с утечкой памяти. Это будет связано с тем, что куча слишком мала. Но я не думаю, что это вероятно: 200 000 x 3 x 8 байт - это меньше 5 мегабайт, и вы увеличили кучу до 64 мегабайт.
Вы могли бы повторно использовать эти массивы, чтобы уменьшить отток создания / удаления объектов, но неясно, стоит ли это того. Ваш пример кода не является представителем реального приложения.