![](/img/trans.png)
[英]memory reallocation issue in Java ArrayList, HashSet and HashMap
[英]Java ArrayList Memory Issue
我有以下代码:
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;
*
*
}
我的问题是:
1)没有办法知道,您的gc调用仅是JVM尝试执行收集的建议。
2)Java中的所有内容都是按值传递的。
3)我不知道你的意思。 但是您的克隆(假设它为该列表创建了新项目,并且这些项目不共享对任何对象的引用)与原始列表完全不同。 像int这样的原始值是不可变的,它只是您需要担心的对象实例。 似乎您正在使用复制构造函数,因此请格外小心,复制每个项目包含的任何对象以及子项可能包含的任何对象; 您的副本需要很深。
4)我不知道你的意思。 如果您没有对原始文件的任何引用,则下次GC运行时将有资格进行收集。
垃圾收集器会收集mAllProducts数组列表吗?
仅当1)垃圾收集器决定这样做和2)当它超出范围时
克隆列表是按值ArrayList传递的吗?
是
如果第二个问题的答案是肯定的,那意味着克隆arraylist没有对内存的引用吗?
绝对需要引用内存中的某个点,否则就不能存在于逻辑系统(例如计算机)中。
最后,如果第二个问题的答案是“是”,那么这意味着将仅在系统正在使用的时间停留在内存中,然后才会进行垃圾回收吗?
同样,垃圾收集器将在认为合适的情况下进行收集。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.