Arrays.fill 265 veces más lento en G1GC: la historia de una instrucción

Why is Arrays.fill 265 times slower on G1GC?

Un benchmark aparentemente aburrido revela una anomalía impactante: llenar dos arrays con Arrays.fill es 265 veces más lento en G1GC que en ParallelGC, sin que haya asignación ni recolección de basura. El autor rastrea el problema hasta una instrucción de máquina y descubre que la barrera de escritura de G1, diseñada para evitar trabajo innecesario, falla en este caso específico. El artículo explica con ensamblador ARM64 y código Java cómo el JIT genera código diferente según el recolector, y por qué la barrera de G1, con sus tres salidas tempranas, no puede evitar el camino lento en este benchmark.

139 milisegundos contra 0,5 milisegundos: el mismo código Java, el mismo JDK, la misma máquina. G1 es 265 veces más lento.

Más de este día

2026-09-04