我的应用程序中有一个静态地图,当我点击链接时会填充该地图。 之后,它会生成大量对象并存储它们。现在我有一个链接可以清除这张地图。
这是我的代码。
Hello1 hello1 = new Hello1();
hello1.setHello("Helllollo1");
Hello hello = new Hello();
hello.setHello1(hello1);
hello.setHello("Hellollo");
setMap("1", (Object)hello);
Hello1 hello2 = new Hello1();
hello2.setHello("Helllollo1");
Hello helo = new Hello();
helo.setHello1(hello2);
helo.setHello("Hellollo");
setMap("2", (Object)helo);
Hello1 hello3 = new Hello1();
hello2.setHello("Helllollo1");
Hello helo1 = new Hello();
helo1.setHello1(hello3);
helo1.setHello("Hellollo");
setMap("3", (Object)helo1);
现在我有一个方法removeMap,其工作原理如下
public static void removeMap(String key){
if(map.containsKey(key)){
map.remove(key);
}
}
所以当我在添加上面三个对象之后为单个键调用此方法时,是否收集了垃圾收集对象?
答案 0 :(得分:2)
是的,清除地图后,从中引用的对象将有资格进行垃圾收集,如果没有其他强引用。
请注意,从地图中删除条目不会立即导致垃圾收集 - 这只是意味着地图将不再阻止对象被垃圾回收。
答案 1 :(得分:0)
是的,当您清除Map
或从中删除对象时,对象将有资格进行垃圾回收。由于对象没有任何引用,因此它们符合GC的条件。
任何无法访问或没有引用的对象都有资格进行收集。
答案 2 :(得分:0)
你的问题体现了矛盾。如果对象,或者更确切地说是对象的引用已经从地图中移除,它就不再是“在地图内部”。