Java может освобождать память только для объектов, на которые программа больше не ссылается (т. Е. Использует).И как только на объект больше не ссылаются, он будет очищен довольно быстро (хотя и вне вашего прямого контроля).
Это, вероятно, просто утечка памяти .Вам нужно проанализировать память, чтобы увидеть, каких объектов там не должно быть, а затем определить , почему сборщик мусора считает, что они все еще достижимы.В какой-то момент в вашем коде вы не сможете освободить эти переменные, которые больше не нужны (например, поместите их в Map
, хотя есть много способов утечки памяти, если выне осторожно).
Первый шаг - проанализировать кучу, чтобы выяснить, каких объектов там не должно быть.Для этого вы можете использовать jhat , jvisualvm , различные профилировщики и, возможно, другие инструменты.
Для решения этой проблемы могут использоваться следующие вопросы: