G1 concurrent refinement regression

Thomas Schatzl thomas.schatzl at oracle.com
Mon Sep 29 06:10:15 UTC 2025


Hi,

On 29.09.25 08:09, Thomas Schatzl wrote:
> Hi Brian,
> 
> On 28.09.25 18:19, Brian S O'Neill wrote:
>> I'm observing an interesting regression between build 26-ea+16-1649 
>> and build 26-ea+17-1764 with respect to concurrent refinement. I 
>> suspect the cause is JEP 522.
>>
>> I ran a stress test in which GC pauses are about 25ms in the steady 
>> state. With 26-ea+16-1649, concurrent refinement is never initiated.
> 
> Thanks for trying out latest EAs.
> 
> 
>  > With 26-ea+17-1764 (JEP 522) concurrent refinement starts after the
>  > test has run for a few minutes. Eventually, concurrent refinement runs
>  > back to back forever, wasting a CPU core and affecting overall
>  > performance.
>  >
>  > [...]
>  >
>  > The problem goes away when I set -XX:MaxGCPauseMillis=500 or higher.
>  > Considering that the pauses are always well below the 200ms default,
>  > I'm surprised that concurrent refinement occurs at all.
> 
> 
> Before and after this change, refinement is and has been driven by time 
> allocated for refinement in the pause.
> 
> By default this is 10% of the maximum pause time goal (- 
> XX:G1RSetUpdatingPauseTimePercent). This is, at a pause time goal of 
> 200ms, 20ms. It is somewhat unlikely that this part of the GC takes 20ms 
> out of your 25ms pauses, so I suspect some bug :)

That said, increasing this percentage would/should serve as a temporary 
workaround.

> 
> Is it possible to add gc+refine=debug,gc+phases=debug to your logs and 
> send them here to better analyze what is happening?
> 
> Thanks,
>    Thomas
> 

Thanks,
   Thomas



More information about the hotspot-gc-dev mailing list