【发布时间】:2015-09-06 21:32:39
【问题描述】:
长期以来,我有一个关于 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 并清除了我未使用的对象?无论如何要检查这个?
【问题讨论】:
标签: java performance collections garbage-collection