Создание списка на основе другого списка для уменьшения использования памяти
Если я вызываю какую-то внешнюю библиотеку, которая возвращает List[LargeObjects]
, то есть список с объектами, которые имеют много полей, это займет большую часть памяти в куче. Однако меня интересует только name
(Строка) поле каждого элемента. Итак, если у меня есть этот код:
externalLib.getLargeObjects.map(e => e.name) match {
case l: List[String] =>
???
case _ =>
???
}
Будет ли JVM GC (в какой-то момент) освободить память, занятую List[LargeObjects]
(поскольку он разыменовывается и не используется после name
список создан) что позволяет мне иметь больше свободной памяти?
1 ответ
Будет ли JVM GC (в какой-то момент) освободить память, занятую
List[LargeObjects]
(поскольку он разыменовывается и не используется после создания списка имен), что позволяет мне иметь больше свободной памяти?
Если никто не ссылается на большой список, и вы проецируете строки только из этих больших объектов, то JVM будет собирать их, как только что-то запускает GC при их сохранении.
Когда GC подойдет к графику живых объектов, он увидит, что есть живые ссылки на ваши String
объекты. Что касается списка, если никто не ссылается на него, он будет считать его мертвым и заберет его.