JVM Compressed Oops

  • ¿Qué es un OOP y por qué debe de comprimirse?

    Un "oop" u "ordinary object pointer" es un apuntador que administra a objeto. Este es normalmente del mismo tamaño que los apuntadores de la maquina en que reside, esto quiere decir que si es un sistema LP64, 64bits será el tamaño. Como sabemos, en un sistema ILP32 la cantidad máxima de heap que se puede utilizar es menos de 4G, pero por otro lado en un sistema operativo de 64 bits se puede instanciar 5 veces o más dependiendo de cuándo se requiera. Pero, por qué sucede la diferencia de tamaño en uso de memoria? sencillo, por el tamaño de los apuntadores administrados.

  • Mejoras en el uso como opción adicional en Java?

    Es un hecho que existen mejoras en el desempeño de la JVM y por ende de la aplicación cuando es requerido un heap muy grande (lo uso un heap de 28G y me gustaría compartir el benchmarking pero antes quiero estructurarlo más). Por otra parte se recomienda ampliamente el tuneo de los parámetros ParallelGCThreads y ParallelCMSThreads ya que requiere mucho poder de procesamiento.
     

    Si vas a implementar el parámetro, te recomiendo monitorear constantemente los logs del gc que se habilitan de la siguiente manera:

     

    Para posteriormente validar el comportamiento de la JVM con los siguientes parámetros:

     

    WARNING: No usarlo con heaps Mayores a 30G, pues según nuestras pruebas es contraproducente o el beneficio nulo.

Oracle CompressedOops