基于另一个列表创建列表以减少内存使用量

时间:2017-06-15 11:45:06

标签: scala memory garbage-collection jvm

如果我调用一些返回List[LargeObjects]的外部库,这是一个包含大量字段的对象的列表,这将占用大量的堆内存。但是,我只对每个元素的name(字符串)字段感兴趣。所以,如果我有这个代码:

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

JVM GC(在某些时候)会释放List[LargeObjects]占用的内存(因为它被解除引用而在创建name列表后没有使用)从而允许我有更多的可用内存吗? / p>

1 个答案:

答案 0 :(得分:0)

  

JVM GC(在某些时候)会释放所占用的内存   List[LargeObjects](因为它被解除引用而不是在之后使用   创建了名单)从而让我有更多的空闲记忆?

如果没有人引用大列表,并且您只从这些大对象中投射字符串,那么一旦某些东西在存储它们的生成中触发GC,JVM就会收集它们。

当GC走向实时对象图时,它会看到有String个对象的实时引用。至于列表,如果没有人引用它,它会认为它已经死了并收集它。