En este blog post Nikita Salnikov-Tarnovski presenta un interesante caso de estudio de una aplicación Java que inicialmente tenía un heap de 1.5GB y que terminaron reduciendo a 73MB. El primer error grande que cometieron en la aplicación es trabajar directamente con objetos creados a través de XMLBean, que resultaron emplear internamente estructuras de datos más compleja de lo necesario. Almacenando manualmente estos objetos en java.util.HashMap la aplicación pasó de consumir 1.5 GB derrama a 214 MB.
Después cambiaron el java.util.HashMap por una implementación más eficiente de Trove Collections, lo que bajó el consumo de memoria 143 MB. Haciendo cambios en los propios objetos que estaban almacenando para representar de un modo más eficiente la información bajaron a 93 MB. Finalmente, estaban usando una máquina virtual de 64 bits. Activando la opción para comprimir punteros pasaron a emplear 73 MB.
Aquí tenéis un gráfico que muestra cómo fue evolucionando su gasto de memoria según fueron realizando los diferentes cambios en la aplicación:
Se trata de un caso de estudio bastante interesante del cual podemos aprender lecciones para nuestras aplicaciones.