RFR (M): 8159978: Use an array to store the collection set regions instead of linking through regions
Jon Masamitsu
jon.masamitsu at oracle.com
Wed Jun 29 17:06:58 UTC 2016
On 06/29/2016 05:32 AM, Thomas Schatzl wrote:
> Hi,
>
> On Tue, 2016-06-28 at 15:41 -0700, Jon Masamitsu wrote:
>> Thomas,
>>
>> http://cr.openjdk.java.net/~tschatzl/8159978/webrev.1/src/share/vm/gc
>> /g1/g1CollectedHeap.cpp.frames.html
>>
>> For an evacuation failure the region is set to old here
>>
>> 4664 // The region is now considered to be old.
>> 4665 r->set_old();
>>
>> and below the elapsed times are incremented.
>>
>> 4676 if (r->is_young()) {
>> 4677 _young_time += os::elapsedTime() - start_time;
>> 4678 } else {
>> 4679 _non_young_time += os::elapsedTime() - start_time;
>> 4680 }
>>
>> Is it correct that elapsed time for a failed evacuation will be now
>> be added to the _non_young_time? Whereas before it was included in
>> the _young_time because non_young was assigned a value before the
>> evacuation failure was tested?
> Unintended change. Fixed.
Thanks.
>
> It would have been correct again in the follow-up change that
> parallelizes collection set freeing, so that's why I probably
> overlooked this. Sorry.
No problem.
>
>> [..]
>> http://cr.openjdk.java.net/~tschatzl/8159978/webrev.1/src/share/vm/gc
>> /g1/g1CollectionSet.cpp.frames.html
>>
>> 177 void G1CollectionSet::iterate_from(HeapRegionClosure* cl, uint
>> worker_id, uint total_workers, bool may_be_aborted) {
>>
>> I don't understand this iterate method. It seems like because of
>> line 196
>>
>> 195 if (cur_pos == len) {
>> 196 cur_pos = 0;
>> 197 }
>>
>> all the workers will process region 0 in the collection set. Is this
>> method creating slices for each worker? Or trying to stride through
>> the collection set with each worker getting a different starting
>> index?
> The intent is to let different threads iterate over the entire list
> with each starting at a different index.
Ok.
>
> I updated the change at
> http://cr.openjdk.java.net/~tschatzl/8159978/webrev.2/ (full)
> http://cr.openjdk.java.net/~tschatzl/8159978/webrev.1_to_2/ (diff)
>
> Changes include (from Erik Helin):
>
> - rename G1CollectionSet::set_max_size() to
> G1CollectionSet::initialize() because generally the post-construction
> method in our code base typically is called that.
>
> - removed the may_be_aborted parameter
> from G1CollectionSet::iterate_from(), as it was basically used only for
> paranoia checking code.
>
> - closurified the G1CollectionSet::verify_young_ages()
> and G1CollectionSet::verify_young_cset_indices() methods.
>
> - some comments about MT safeness in g1CollectionSet.hpp
>
> - constified the G1CollectionSet::iterate* methods
>
> - fixed timing attribution
Looks good.
Jon
>
> Testing:
> jprt
>
> Thanks,
> Thomas
>
More information about the hotspot-gc-dev
mailing list