2017-06-15 68 views
1

如果我調用某個外部庫返回List[LargeObjects](這是一個包含很多字段的對象的列表),這將佔用大量堆內存。但是,我只對每個元素的name(字符串)字段感興趣。所以,如果我有這樣的代碼:基於另一個列表創建列表以減少內存使用量

externalLib.getLargeObjects.map(e => e.name) match { 
    case l: List[String] => 
    ??? 
    case _ => 
    ??? 
} 

將JVM GC(在某些點)釋放由List[LargeObjects]採取的(因爲它是間接引用,並創建name列表之後未使用)內存從而使我有更多的空閒的內存?

回答

0

將JVM GC(在某些點)釋放由 List[LargeObjects]採取的內存(因爲它是間接引用,並創建 名稱列表之後未使用),因此讓我有更多的空閒內存?

如果沒有一個被引用的大名單,而你唯一項目從這些大對象的字符串,那麼一旦觸發的東西在產生GC存儲他們JVM將收集它們。

GC向上移動活動對象圖形時,它會看到對您的String對象的實時引用。至於清單,如果沒有人引用它,它會認爲它已經死了並收集它。