![](/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.