Nic*_*son 0 java garbage-collection memory-management
我有以下代码:
result = binding.downloadData(sourceURLString.replace("{CAT_ID}", catId), Data.class);
ArrayList<Data> mAllProducts = result.getProducts();
cloneList(mAllProducts);
System.gc();
Run Code Online (Sandbox Code Playgroud)
这是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));
}
}
Run Code Online (Sandbox Code Playgroud)
数据构造函数:
public Data(Data item2) {
this.imageUrl = item2.imageUrl;
*
*
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
1)无从知晓,你的gc调用仅仅是JVM尝试执行集合的建议.
2)Java中的所有内容都是按值传递的.
3)我不知道你的意思.但是,您的克隆(假设它为列表创建新项目,并且项目不共享对任何对象的引用)与原始列表完全分离.像int这样的原始值是不可变的,它只是你必须担心的对象实例.您似乎正在使用复制构造函数,因此请特别注意复制每个项目包含的任何对象,以及这些子项可能包含的任何项目; 你的副本需要很深.
4)我不知道你的意思.如果您没有对原件的任何引用,则下次GC运行时将有资格进行收集.
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |