我有以下代码:Java的ArrayList的内存问题
result = binding.downloadData(sourceURLString.replace("{CAT_ID}", catId), Data.class);
ArrayList<Data> mAllProducts = result.getProducts();
cloneList(mAllProducts);
System.gc();
这里是mAllProducts ArrayList的
static List<Data> clone;
public static void cloneList(ArrayList<Data> list) {
clone = new ArrayList<Data>();
for(Data item: list){
clone.add(new Data(item));
}
}
数据构造的深层副本:
public Data(Data item2) {
this.imageUrl = item2.imageUrl;
*
*
}
我的问题是:
- 垃圾收集器收集的mAllProducts arraylist是否会被收集?
- 克隆列表是由值ArrayList传递的吗?
- 如果第二个问题的答案是肯定的,那意味着克隆数组列表没有对内存的引用?
- 最后,如果第二个问题的答案是肯定的,那意味着只会留在系统正在使用的时间内存,然后会被垃圾收集?
尚未完成读取,但您应该使用'clone = new ArrayList (list.size());'以便新列表具有正确的大小,并且不必在添加很多条目。 – jlordo
1.是的。 2.是的。 3.是的。 4.是的。 – Doorknob