jueves, enero 06, 2011

Oracle JRockit: The Definitive Guide

jueves, enero 06, 2011 por Martín

El último libro que he leido es este Oracle JRockit: The Definitive Guide y tengo que decir que ha sido una agradable sorpresa. Quienes conocéis este blog quizás recordéis algunos posts en el pasado sobre JRockit y Mission Control. Todos de la época en la que trabajaba con WebLogic (cuando todavía era de BEA) y JRockit era la máquina virtual recomendada.

El caso es que este libro cayó en mis manos. Además no de cualquier manera, sino que es un regalo de su autor Marcus Hirt. Además Marcus no es sólo el autor de este libro sino que además es que es uno de los creadores de JRockit, un proyecto que viene de su empresa Appeal Virtual Machines, más tarde comprada por BEA. La historia de este emprendimiento es muy interesante y me la guardo para otro post en breve. Mientras tanto os pongo la foto del libro que es que ¡además está firmado!


Pero vamos realmente al libro. Mi opinión general es que es una pena que los autores no le hayan llamado de otra forma al libro, porque realmente estamos ante una enciclopedia sobre como funcionan las máquinas virtuales de lenguajes de programación en general y ya más en particular la JVM de JRockit. Aunque hay muchas referencias también a Hotspot. Los autores demuestran un conocimiento inmenso de la materia, como era de esperar, pero no entran tanto en detalle para que los meros mortales no acostumbrados al lenguaje máquina nos lleguemos a perder.

El libro consta de tres partes claramente diferenciadas. La primera parte que va del primer capítulo al cinco es la más interesante y teórica. El capítulo primero es una introducción para calentar motores. El capítulo dos trata sobre la generación e interpretación de código en una máquina virtual y sus problemas. Describe las aproximaciones de interpretes clásicos, las puramente JIT (como JRockit) o las híbridas (Hotspot). Las ventajas y limitaciones del sistema de JIT, y es toda una clase magistral de por qué las máquinas virtuales como JRockit pueden ser mucho más rápidas que el código generado por compiladores estáticos.

El capítulo tres no se queda atrás y trata sobre el sistema de gestión de memoria adaptativo y sus ventajas sobre la gestión de memoria tradicional. Centrándose posteriormente claro está en la recolección de basura. Muchos de los términos asociados a JRockit ya los comenté yo en el pasado aquí y aquí, pero vaya que no hay comparación claro. Otro tema interesante es el de JRockit Real Time que permite un funcionamiento determinista en la recolección de basura.

El capítulo cuatro trata sobre la gestión de Threads y sincronización y su impacto en el rendimiento de aplicaciones. Se explican los diferentes tipos de locks y threads que hay en la máquina virtual y nos hace entender mucho mejor el impacto que tienen ciertas operaciones como synchronized o variables como volatile presentes en nuestro código, en la máquina virtual.

Finalmente el capítulo 5 trata sobre benchmarking y tuning. Explica como hacer benchmarks de manera adecuada y da muchos consejos sobre prácticas que pueden ser peligrosas o que se deberían evitar como el usar System.gc, el tener muchos finalizers, el tener muchos threads, el impacto de los objetos demasiado grandes, etc.

La segunda parte del libro, desde el capítulo 6 hasta el 12 sí que es mucho más JRockit. Esta parte se lee muy rápido porque es más práctica. Describe las diferentes herramientas de JRockit como son Mission Control, Flight Recorder o el Memleak Detector. En serio, estas herramientas son una pasada. El poder conectarte a una máquina virtual en remoto y hacer una grabación de absolutamente todo lo que está pasando en detalle en la VM y poder ver después TODO, es increible.

Hace tiempo puse una imágen en este artículo "10 formas de reducir la contención por bloqueos" puse una captura hecha en su momento con esta herramienta, sobre un error difícil de detectar. La captura en cuestión no tiene historia, es un gráfico de la CPU pasando al 100%, el caso es que el detectar que ese pico se producía por dos HashMap.put() era realmente lo complicado. Con las herramientas de Mission Control, sinceramente, pan comido, con un overhead mínimo puedes ver en vivo y en directo lo que está pasando en tu VM: qué métodos se ejecutan, el porcentaje de la CPU, los objetos en memoria, las recolecciones de basura, etc. Para mi, una pasada.

Por último el capítulo final trata sobre JRockit Virtual Edition. Algo que todavía no está disponible para descarga (si buscáis hay algo pero viene con WebLogic) pero que básicamente es una máquina virtual de Java que se ejecuta directamente sobre el Hardware. De este modo se ahorran muchos pasos intermedios, especialmente el sistema operativo y se hacen posibles cosas que de otra forma serían complicadas comocambios de contexto menos costosos entre threads o heaps locales a threads.

Y eso es todo. Como veis, es fácil deducir que el libro me ha gustado mucho. Quizás es que me ha salido gratis :-) ¿Lo recomendaría? Al que le guste mucho Java, sí. Para el programador que no esté muy interesado en los temas de rencimiento, etc., entonces le será un libro difícil de leer. Es una pena los capítulos tan centrados en las herramientas de JRockit, pero bueno. Si disfrutas con los temas de análisis de rendimiento y te gustaría saber mejor como funciona una máquina virtual de Java, entonces definitivamente lo recomendaría. Y bueno, si usas WebLogic entonces es un sí o sí, libro fundamental por saber mejor como funciona la máquina virtual de tu servidor.

Pero bueno, aquí podéis ver otras opiniones: 1, 2 y 3.

Por cierto, que tengo entendido que Hotspot y JRockit se van a mezclar muy pronto.

comments

0 Respuestas a "Oracle JRockit: The Definitive Guide"