Характеристики памяти в коллекции Scala
Есть удобная страница с характеристиками производительности классов коллекции Scala. Есть ли аналогичные данные об объеме памяти?
У меня есть ситуация, когда я обеспокоен использованием памяти и хотел бы учесть это при выборе коллекции для использования. Например, между Array[Array[T]]
а также Vector[Vector[T]]
,
2 ответа
Вот что я узнал, заполнив соответствующие неизменяемые последовательности 1 000 000 объектов на 2.9.0. Я заставил их всех указать на один и тот же объект, чтобы выделить размер содержимого.
Array
: 1x (базовая длина 4000 016 байт на 32 бита; 8 000 024 на 64 бита)Vector
: 1.17xList
,Queue
,Stack
: 4x- оценивали
Stream
: 10x
System.gc
был вызван, затем вызвал дамп кучи, затем открыл в Eclipse MAT.
На основании этого Array
а также Vector
довольно закрыты.
Вы можете начать с простого создания нескольких многомерных векторов и массивов разного размера:
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