Характеристики памяти в коллекции Scala - PullRequest
14 голосов
/ 05 июня 2011

Имеется удобная страница о характеристиках производительности классов коллекции Scala .Есть ли аналогичные данные об объеме памяти?

У меня есть ситуация, когда я обеспокоен использованием памяти и хотел бы учесть это при выборе коллекции для использования.Например, между Array[Array[T]] и Vector[Vector[T]].

Ответы [ 2 ]

17 голосов
/ 12 июня 2011

Вот что я обнаружил, заполнив соответствующие неизменяемые последовательности 1 000 000 объектов на 2.9.0. Я заставил их всех указать на один и тот же объект, чтобы выделить размер содержимого.

  • Array: 1x (базовая длина 4000 016 байт на 32 бита; 8 000 024 на 64 бита)
  • Vector: 1,17x
  • List, Queue, Stack: 4x
  • оценено Stream: 10x

System.gc вызывается, затем запускается дамп кучи, затем открывается в Eclipse MAT.

Исходя из этого, Array и Vector довольно закрыты.

1 голос
/ 08 июня 2011

Вы можете начать с простого создания нескольких многомерных векторов и массивов разного размера:

val vMin = Vector.fill (10  , 10)(9)
val vMed = Vector.fill (1000, 10)(9)
val aMed =  Array.fill (1000, 10)(9)

10 массивов из 10 массивов значений со значением 9, 1000 таких массивов, 1000 таких векторов.

Для измерения размера вы можете использовать

$JAVA_HOME/bin/jvisualvm 
...