Desde Java 6 existen formas de almacenar datos en memoria desde un programa Java que están fuera del heap, y que por lo tanto no son analizados por el recogedor de basura cada vez que tiene que liberar memoria RAM.
Almacenar datos fuera del heap es algo que puede incrementar considerablemente el rendimiento de una aplicación si estos datos tienen un gran tamaño y son datos que vamos a usar durante mucho tiempo, por lo que van a sobrevivir un montón de pasadas del recogedor de basura. Estos datos pueden incrementar considerablemente el tamaño del heap, y por tanto el trabajo que tiene que realizar el recogedor de basura, para no terminar liberando nada de su memoria ya que son datos que van a tener una vida muy larga. De ahí el interés de contar con una región de memoria que no va a ser examinada por el recogedor de basuras.
Me he encontrado en GitHub una implementación de un HashMap que almacena los datos fuera del heap para Java 8. Sólo almacena datos de tipo binario (array de bytes). Pero puede ser una forma muy sencilla y rápida de almacenar datos fuera del heap en nuestra aplicación sin tener que usar directamente este API.
¿Alguna vez habéis tenido problemas de rendimiento en una aplicación vuestra precisamente por tener una gran cantidad de datos en memoria que causaba pausas por culpa del recogedor de basuras?