Nuevo Garbage Collector para V8

Juan Mellado, 25 Noviembre, 2011 - 12:38

V8 es la máquina virtual de JavaScript que lleva implementada Chrome. El lunes el equipo de desarrollo anunció un cambio en su política de gestión del Garbage Collector (GC) para mejorar el rendimiento de las aplicaciones interactivas, es decir, aplicaciones web y juegos HTML5 sobre todo.

Antes detenían completamente la ejecución de los programas hasta que el GC hubiera terminado de procesar "toda" la memoria, por lo que el tiempo de proceso del GC dependía del tamaño de la memoria ocupada. Ahora lo hacen de forma incremental, es decir, sólo una parte de la memoria cada vez, evitando así tener que parar los procesos por mucho tiempo y proporcionando una mejor interactividad.

Han creado una prueba de stress para poder medir de una forma objetiva el rendimiento. Con la versión actual de Chrome (16.0.912.41) he obtenido los siguientes resultados:


8000/320 16(max = 236) ms 3307 frames
Score 3
  0 -  10 ms =>  129
 10 -  20 ms => 3028
 20 -  30 ms =>    4
 30 -  40 ms =>   88
 40 -  50 ms =>   20
 50 -  60 ms =>    1
 80 -  90 ms =>    1
110 - 120 ms =>    1
120 - 130 ms =>   18
220 - 230 ms =>    1
230 - 240 ms =>   16

Con la versión Canary (17.0.949.0), es decir, la versión que se encuentra actualmente en desarrollo, he obtenido los siguientes resultados:


8000/320 16(max = 114) ms 3516 frames
Score 36
  0 -  10 ms =>    9
 10 -  20 ms => 3314
 20 -  30 ms =>   13
 30 -  40 ms =>  163
 40 -  50 ms =>    4
 50 -  60 ms =>    2
 60 -  70 ms =>    2
 70 -  80 ms =>    2
 80 -  90 ms =>    3
 90 - 100 ms =>    2
100 - 110 ms =>    1
110 - 120 ms =>    1

Lo que han intentado con esta mejora es reducir los picos de actividad del GC durante los cuales se detiene completamente la ejecución de los programas en JavaScript. Y como se observa, tras el cambio, el tiempo máximo por frame se ha reducido a la mitad, de 236 a 114 milisegundos. Los números "grandes" tienden a concentrarse en los intervalos "pequeños". Lo que quiere decir que los programas, y por ende los usuarios, obtendrán un mejor tiempo de respuesta que antes, en vez de estar esperando a que termine su labor el GC.

Curiosamente con la versión actual de Firefox (8.0.1) la prueba de stress va mucho mejor para un tiempo medio de frame prácticamente igual (16~17), son unos 10 frames que se van de tiempo en Chrome los que marcan la diferencia:


8000/320 17(max = 58) ms 3534 frames
Score 213
 0 - 10 ms =>    3
10 - 20 ms => 3516
20 - 30 ms =>    2
40 - 50 ms =>    1
50 - 60 ms =>   12

Lo del funcionamiento del GC era algo que ya había detectado cuando estuve haciendo análisis de rendimiento de mis proyectos en JavaScript. Aunque como siempre no se puede esperar la solución perfecta, todo tiene sus ventajas e inconvenientes. Al menos parece que con la nueva versión de V8 la batería de pruebas (versión 6) funciona del orden de un 5% mejor en mi ordenador con la nueva versión de Chrome, y un 50% peor con Firefox.

¿No encontró lo que buscaba?

Utilice el buscador para encontrar más páginas en esta web o en toda Internet.
 
Web www.inmensia.com