Scala характеристики памяти памяти

Существует удобная страница о характеристиках производительности классов коллекции Scala. Имеются ли подобные данные по памяти?

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

Ответы

Ответ 1

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

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

System.gc был вызван, а затем вызван сброс кучи, а затем открыт в Eclipse MAT.

На основании этого Array и Vector закрыты.

Ответ 2

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

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