2017-06-15 7 views
1

多くのフィールドを持つオブジェクトのリストであるList[LargeObjects]を返す外部ライブラリを呼び出すと、ヒープメモリが大量に消費されます。しかし、私は各要素のname(String)フィールドにのみ興味があります。私はこのコードを持っているのであれば、(いくつかの点で)別のリストに基づいてリストを作成してメモリ使用量を減らす

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

うJVM GCをので、私はより多くを持ってできるようにする(それが逆参照してnameリストが作成された後に使用されていないため)List[LargeObjects]で撮影したメモリを解放空きメモリ?

答えて

0

うJVM GC(それが間接参照と 名のリストが作成された後に使用されていないため)ので、私はより多くの空きメモリを持つことができるように List[LargeObjects]で撮影されたメモリを解放(ある時点で)?

大きなリストを参照する人がいなくても、これらの大きなオブジェクトから文字列を投影するだけの場合は、それらを格納する世代で何かGCがトリガーされたときにJVMがそれらを収集します。

GCがライブオブジェクトのグラフを表示すると、Stringオブジェクトへのライブ参照があることがわかります。リストは誰もそれを参照していなければ、死んだとみなして収集します。

関連する問題