Речь идет об утечке памяти в приложении Android объекта Thread.
Я еще не знал, что следующий код вызывает утечку памяти, так как я запустил программу для Android в течение 3 лет.
Thread t = new Thread();
tНЕ обнаруживается сборщиком мусора.
Вопрос в том, как я могу освободить локальную переменную t из памяти vm?
Я решил поэкспериментировать
Я сделал кнопкув моем приложении, которое выполняет следующий код.
for(int i=0;i<1000;i++)
{
Thread t = new Thread();
}
Я ожидал, что локальная переменная t когда-нибудь будет освобождена.
И я выполнил ее в режиме отладки и открыл перспективу E-clipse DDMS.
Я выбрал поток приложений на устройстве Android (2.3.6) и нажал кнопку «Обновить кучу»
, чтобы я мог проверить размер кучи и выделить ее в реальном времени.
Он начался с общего размера кучи 5,445 МБ и выделил 2,779 МБ.
И я нажал кнопку, которая создает 1000 объектов потока.
Он изменился на размер кучи 5,508 МБ и выделил 3,058 МБ.
Как вы там знаетеэто кнопка «Причинить GC» в перспективе DDMS.
Я нажал эту кнопку.Но выделенная память по-прежнему составляла 3,058 МБ.
Я снова нажал кнопку, чтобы создать еще 1000 объектов потока.
И нажал безнадежную кнопку «Gause GC».
В конечном итоге кучаразмер ушел около 20 МБ и возникла исключительная ситуация нехватки памяти.
Как освободить объект экземпляра потока?