如果我调用一些返回List[LargeObjects]
的外部库,这是一个包含大量字段的对象的列表,这将占用大量的堆内存。但是,我只对每个元素的name
(字符串)字段感兴趣。所以,如果我有这个代码:
externalLib.getLargeObjects.map(e => e.name) match {
case l: List[String] =>
???
case _ =>
???
}
JVM GC(在某些时候)会释放List[LargeObjects]
占用的内存(因为它被解除引用而在创建name
列表后没有使用)从而允许我有更多的可用内存吗? / p>
答案 0 :(得分:0)
JVM GC(在某些时候)会释放所占用的内存
List[LargeObjects]
(因为它被解除引用而不是在之后使用 创建了名单)从而让我有更多的空闲记忆?
如果没有人引用大列表,并且您只从这些大对象中投射字符串,那么一旦某些东西在存储它们的生成中触发GC,JVM就会收集它们。
当GC走向实时对象图时,它会看到有String
个对象的实时引用。至于列表,如果没有人引用它,它会认为它已经死了并收集它。