Hashmap 或 List<Hashmap> GC 何时符合条件?

When is Hashmap or List<Hashmap> GC eligible?

我有一个很长一段时间以来与 hashmap GC 有关的悬而未决的问题。检查了 google 和其他博客,似乎没有找到答案。

就在这里,

假设我有两种方法,一种返回 Hashmap,另一种返回 List,如下所示,

public void returnData(){
    Map<String,String> outerMap = getMap();
    for(elements from getMap){
        //DO SOMETHING
    }
    List<Map<String,Object> outerList = getListMap();
    for(elements from getListMap){
        //DO SOMETHING
    }
}
private Map<String,String> getMap(){
    Map<String,String> innerMap = new HashMap<String,String>();
    for(i){
        innerMap.put("one"+i,"test"+i);
    }
    return innerMap;
}
private List<Map<String,Object>> getListMap(){
    List<Map<String,Object>> innerList = new ArrayList<HashMap<String,Object>>;
    for(5 times){
        Map<String,String> map = new HashMap<String,String>();
        map.put("two"+i,new Object());
        innerList.add(map);
    }
    return innerList;
}

根据上面的代码,请告诉我,
1、innerMap和innerList什么时候有资格GC?
2. outerMap和outerList什么时候有资格GC?
3. 将 innerMap 和 innerList 设置为 null 是否符合 GC 条件?
4.要使outerMap和outerList符合GC条件应该怎么做?
5. 最后,如何衡量GC是否发生并清除了我未使用的对象?无论如何要检查这个?

列表和地图与任何其他对象一样。一旦没有来自任何 GC 根(线程堆栈的静态变量)的强引用路径,它们就有资格进行 GC。

在这种情况下,一旦 returnData() 停止执行,没有人有指向代码中涉及的任何列表和映射的引用,因此所有内容都符合 GC 条件(当然除非代码隐藏评论后面在某处存储了一个引用)。

如果您真的遵守规范,outerMap 引用的 Map 在第一个 for 循环后立即符合 GC 条件。

顺便说一句,重新阅读你的问题,你似乎混淆了对对象的引用和对象。 innerMapouterMap 是对单个对象的两个引用:一个 Map。对象被垃圾收集。不是参考文献。