Arrays.fill auf G1GC 265-mal langsamer: Die Jagd nach einer einzigen Maschineninstruktion
Why is Arrays.fill 265 times slower on G1GC?
Ein Benchmark zeigt: Arrays.fill ist mit G1GC 265-mal langsamer als mit ParallelGC, obwohl keine Allokationen oder GC-Zyklen stattfinden. Der Autor jagt die Ursache bis zu einer einzelnen Maschineninstruktion und entdeckt, dass die Instruktion nur die halbe Antwort ist. Mit Assembly-Level-Profiling und detaillierten Code-Analysen wird erklärt, warum die G1-Write-Barrier so viel teurer ist und welche JVM-Flags helfen können.
139 Millisekunden gegenüber 0,5 Millisekunden – derselbe Java-Code, dasselbe JDK, dieselbe Maschine. G1 ist 265-mal langsamer.