2011-06-05 17 views
13

Hay una página útil sobre performance characteristics of the Scala collection classes. ¿Hay datos similares sobre la huella de memoria?Características de la huella de memoria de la colección Scala

Tengo una situación en la que me preocupa el uso de la memoria y me gustaría tener esto en cuenta en mi elección de colección para usar. Por ejemplo, entre Array[Array[T]] y Vector[Vector[T]].

+0

¿No sabes cómo inicializar una gran matriz de matrices o vectores de vectores? ¿O no sabes cómo medir la huella de memoria? Esperaría una relación lineal y trataría de refutar o probar esta idea para algunas formas de colección. Luego mida algunos tamaños de muestras hasta el límite de mi máquina. –

+0

Es más que no he realizado esas mediciones y me preguntaba si alguien sabía ... – huynhjl

Respuesta

1

Se podría empezar con una simple generación de múltiples vectores, matrices multidimensionales y de diferente tamaño:

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

10 10 Las matrices de matrices de enteros con valor 9, 1000 dichas matrices, 1000 dichos vectores ...

para medir el tamaño, podría utilizar

$JAVA_HOME/bin/jvisualvm 
16

Esto es lo que he descubierto por llenar las respectivas secuencias inmutables con 1.000.000 de objetos en 2 .9.0. Hice que todos apuntaran al mismo objeto para factorizar el tamaño del contenido.

  • Array: 1x (línea de base 4,000,016 bytes en 32 bits; 8.000.024 sobre 64 bits)
  • Vector: 1.17x
  • List, Queue, Stack: 4x
  • evaluaron Stream: 10x

System.gc se llamó el n volcado de pila desencadenado y luego abierto en Eclipse MAT.

Sobre la base de que Array y Vector son bastante cerrada.

+0

Los vectores no pueden contener primitivas (porque no están especializadas (¿todavía?)) Pero las matrices sí pueden. Entonces, una Matriz [Int] tomaría mucha menos memoria que Vector [Int]. –

Cuestiones relacionadas