tutorial reservadas recorrer palabras lista funcional espaƱol ejemplos scala memory-management

reservadas - Sobrecarga de memoria tupla Scala



scala funcional (1)

Los gastos generales de JVM tienden a ser de 16 a 24 bytes por objeto (32 bits y 64 bits respectivamente, aunque los punteros comprimidos pueden hacer que estos últimos sean más pequeños). Tuple2 está especializado en Int , lo que significa que almacena los valores en los campos, por lo que tiene 8 bytes para dos ints en comparación con 8 + 16 = 24 o 8 + 24 = 32 para (1,2). Si usa una colección no especializada similar (o usa Tuple2 para algo en lo que no está especializado, como Char ), entonces necesita punteros a objetos, y puede que necesite los objetos dependiendo de si se pueden asignar previamente (arbitrario enteros, no; bytes arbitrarios, sí; caracteres arbitrarios, tal vez). Si es así, solo necesitas el puntero y es 8 + 16 = 24 o 16 + 24 = 40 bytes; si no, necesita tres objetos, por lo que es 16 + 8 + 2 * (16 + 4) = 64 y 24 + 16 + 2 * (24 + 4) = 96 respectivamente.

En pocas palabras: los objetos utilizan mucha más memoria que los tipos primitivos, generalmente 3-4x, pero a veces más de 10x. Si tiene poca memoria, empaque todo lo que pueda en arreglos. Por ejemplo:

Malo para el uso de la memoria:

val a = (1 to 10000).map(x => (x,x.toString.length)).toArray

Bueno para el uso de la memoria:

val b = ((1 to 10000).toArray, (1 to 10000).map(_.toString.length).toArray)

Si tiene muy poca memoria, puede escribir iteradores y otros envoltorios que le permiten indexar cosas como si fueran una matriz de tuplas en lugar de una tupla de matrices. Es un poco molesto, pero si no tienes mucha memoria, puede valer la pena.

¿Cuál es el costo de memoria adicional de Tuple [Int, Int]? (1, 2) más de dos Ints sin Tuple?