我有一个Android应用程序,我使用HashMap,其中我保持我的线程(值)每个执行任务(Runnable)。为了确定线程我使用字符串作为键。只要他们执行通常不太长的任务,线程就会一直存在。问题是它们在完成并从HashMap中删除后似乎从未被GC释放过(并且它们不在其他地方引用)。如果我创建了我的应用程序的转储,那么在应用程序的整个生命周期中,我的内存中的任务数量就与我一样多。试图使用HashSet来代替,但结果相同。内存泄漏与Android上的HashMap/HashSet
在代码中,我开始跟他们这几行:
Thread image_fetch_thread = new Thread(new ImageFetchTask(image_url, this));
this.running_image_fetch_threads.put(image_url, image_fetch_thread);
image_fetch_thread.start();
,并在某一时刻后,他们成为去除:
this.running_image_fetch_threads.remove(image_url);
为什么GC不喜欢收集的?
我只是做了android系统中的几件事情,但你真的确定你应该保持地图的线程?在桌面Java中,我会说这是一个明确的代码恶意。 – bwawok 2010-08-17 19:00:23