Reusar Objetos


Hace mucho vi un artículo en el que se investigaban las causas por las que MS Excel usaba muy poca memoria y Calc mucha para manejar el mismo archivo.

Se trataba de una hoja de cálculo en la que todas las filas de cada columna tenían el mismo valor. La conclusión era que Excel reusaba los strings y Calc los duplicaba.

Es un problema al que me he enfrentado últimamente y por suerte a veces es muy fácil resolverlo.

Cuando se leen datos de un archivo o base de datos, es muy difícil que las funciones que invocamos nos devuelvan referencias a strings previamente creados; lo usual es que cada vez que leemos un valor obtenemos un nuevo string. Es responsabilidad del programamdos detectar que en su aplicación se lee una y otra vez el mismo valor y hacer algo al respecto.

En Java los Strings son inmutables por lo que son ideales para reutilizarlos. Yo he adaptado mis programas para reusar los Strings leidos de la base de datos. A veces simplemente se reusa un string previamente obtenido y a veces se utiliza el string para otener otro objeto, también inmutable o directamente un singleton.

En Calc, no es tan sencillo. Para empezar está escrito en C++, pero eso no los desanimó y ya hay una implementación de Strings “internalizados” que permite reutilizar el almacenamiento requerido. No se si llegará a ser integrado en la versión 2.3, pero tendrá un impacto enorme en el uso de memoria, sobre todo para archivos grandes.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s