RFR: 8376126: G1: Convert remaining volatiles in G1ConcurrentMark to Atomic<T> [v2]

Stefan Karlsson stefank at openjdk.org
Tue Jan 27 12:37:18 UTC 2026


On Mon, 26 Jan 2026 10:03:18 GMT, Thomas Schatzl <tschatzl at openjdk.org> wrote:

>> Hi all,
>> 
>>   please convert remaining volatile declarations in `G1ConcurrentMark` to use `Atomic<T>`. These volatiles are used to indicate concurrent phased access (like changing the variable in thread A, then reading the variable in thread B while A is dormant, or only ever updating it in one direction) where concurrency safety is provided by barriers between these phases. But there are also other cases)
>> 
>> The exception is `G1ConcurrentMark::_finger` that has apparently been overlooked in an earlier changes.
>> 
>> Testing: gha
>> 
>> Thanks,
>>   Thomas
>
> Thomas Schatzl has updated the pull request incrementally with one additional commit since the last revision:
> 
>   * reviews

Changes requested by stefank (Reviewer).

src/hotspot/share/gc/g1/g1ConcurrentMark.cpp line 581:

> 579:   uint max_num_regions = _g1h->max_num_regions();
> 580:   for (uint i = 0; i < max_num_regions; i++) {
> 581:     ::new (&_top_at_rebuild_starts[i]) Atomic<HeapWord*>{};

I added a comment about a similar usage of placement new here:
https://github.com/openjdk/jdk/pull/29423#discussion_r2731775781

Could you please take a look at that suggestion and if you agree with it also make that change here?

-------------

PR Review: https://git.openjdk.org/jdk/pull/29368#pullrequestreview-3710929608
PR Review Comment: https://git.openjdk.org/jdk/pull/29368#discussion_r2731795259


More information about the hotspot-gc-dev mailing list