Los objetos Scala siguen aproximadamente las mismas reglas que los objetos Java, por lo que cualquier información sobre ellos es precisa. Here is one source, que al menos parece más adecuado para JVM de 32 bits. (Las JVM de 64 bits usan 8 bytes por puntero, lo que generalmente resulta en 4 bytes de sobrecarga adicional más 4 bytes por puntero, pero puede haber menos si la JVM usa punteros comprimidos, lo que hace por defecto ahora, creo).
Supongo que una máquina de 64 bits sin punteros comprimidos (peor caso); entonces un Tuple3
tiene dos punteros (16 bytes) más un Int
(4 bytes) más sobrecarga del objeto (~ 12 bytes) redondeado al 8 más cercano, o 32 bytes, más un objeto adicional (8 bytes) como un apéndice para el no- versión especializada de Int
. (Tristemente, si utiliza primitivas en tuplas, toma incluso más espacio que cuando usa versiones envueltas). String
es 32 bytes, IIRC, más la matriz para los datos que es 16 más 2 por carácter. java.sql.Timestamp
necesita almacenar un par de Long
s (creo que es), entonces eso es 32 bytes. En total, es del orden de 120 bytes más dos por carácter, que en ~ 20 caracteres es ~ 160 bytes.
Alternativamente, vea this answer para una forma de medir el tamaño de sus objetos directamente. Cuando lo mido de esta manera, obtengo 160 bytes (y mi estimación anterior se ha corregido usando estos datos para que coincida, tuve varios pequeños errores antes).
Buen punto, me olvidé de la sobrecarga adicional en la sobrecarga del objeto String plus. Aún así, no son muchos datos. –
¿Por qué 24 más 2 por carácter en la matriz String? IIRC, una matriz tiene 8 bytes frente a 4 bytes para una matriz, además de los elementos. –
@DanielC.Sobral: hay sobrecarga de objetos más longitud, que es de 16 bytes en una máquina de 64 bits, así que estaba un poco fuera. –