问题
There is a handy page about performance characteristics of the Scala collection classes. Is there similar data on memory footprint?
I have a situation where I'm concerned about memory use and would like to factor this in my choice of collection to use. For instance, between Array[Array[T]]
and Vector[Vector[T]]
.
回答1:
Here is what I've found out by filling up those respective immutable sequences with 1,000,000 objects on 2.9.0. I had them all point to the same object to factor out the size of the content.
Array
: 1x (baseline 4,000,016 bytes on 32 bits; 8,000,024 on 64 bits)Vector
: 1.17xList
,Queue
,Stack
: 4x- evaluated
Stream
: 10x
System.gc
was called then triggered heap dump then opened in Eclipse MAT.
Based on that Array
and Vector
are pretty closed.
回答2:
You could start with a simple generation of multiple, multidimensional Vectors and Arrays of different size:
val vMin = Vector.fill (10 , 10)(9)
val vMed = Vector.fill (1000, 10)(9)
val aMed = Array.fill (1000, 10)(9)
10 Arrays of 10 Arrays of Ints with Value 9, 1000 such Arrays, 1000 such Vectors ...
To measure the size, you could use
$JAVA_HOME/bin/jvisualvm
来源:https://stackoverflow.com/questions/6243232/scala-collection-memory-footprint-characteristics