gpt4 book ai didi

java - Android 上的 HashMap/HashSet 内存泄漏

转载 作者:行者123 更新时间:2023-12-01 16:02:24 24 4
gpt4 key购买 nike

我有一个 Android 应用程序,我在其中使用 HashMap,其中保存每个执行任务(可运行)的线程(值)。为了识别线程,我使用字符串作为键。只要线程执行通常不会很长的任务,线程就处于 Activity 状态。问题是它们在完成并从 HashMap 中删除后似乎从未被 GC 释放(并且它们没有从其他任何地方引用)。如果我创建应用程序的转储,内存中的任务数量与应用程序生命周期中启动的任务数量一样多。尝试使用 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不喜欢收集它们?

最佳答案

您确定您的线程实际上已完成吗?即使您删除了 HashMap 中对 Thread 的引用,如果它实际上尚未完成,也不会被 GC。 run 方法必须完成才能发生。

关于java - Android 上的 HashMap/HashSet 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3497102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com