【发布时间】:2015-07-01 12:15:00
【问题描述】:
我在公开可用的地图中保留对本地创建的对象的引用。当我从地图中删除对象时,它也应该从内存中删除(无效)。
public class X {
public boolean infiniteloop = true;
public X() {
new Thread(new Runnable() {
@Override
public void run() {
while (infiniteloop) {
System.out.println("Still exists");
}
}
}).start();
}
public class Y{
Map myMap = new HashMap();
public Y() throws InterruptedException{
X x = new X();
myMap.put("Key", x);
Thread.sleep(10000);
((X)myMap.get("Key")).infiniteloop= false;
myMap.remove("Key");
}
}
在上面的代码中,“Still exists”是myMap.remove("Key")之后的打印结束。这意味着该对象仍然存在于内存中。如何从内存中删除它?
【问题讨论】:
-
Runnable不在乎它是否在地图中。 -
我认为 runnable 不是问题,因为我在从地图中删除对象之前将 inifiniteloop 设置为 false。
-
不,您将其设置为 false 在
Thread已经运行之后。你可以简单地用调试器检查它。 -
请注意我的回答,你犯了这么多错误,比如无限循环应该是布尔无限循环,Runnable 应该已经实现了 run 方法等。我的简单问题在这里你是如何测试上述程序的???跨度>
-
@Dev 感谢您改进代码,我将其添加到我的问题中。我没有测试我的代码。这是用来澄清我的问题的伪代码。它实际上不必工作。
标签: java android object memory dictionary