RFR (M): 8159978: Use an array to store the collection set regions instead of linking through regions
Jon Masamitsu
jon.masamitsu at oracle.com
Tue Jun 28 22:41:35 UTC 2016
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?
Old code is
4811 if (non_young) {
4812 non_young_time_ms += elapsed_ms;
4813 } else {
4814 young_time_ms += elapsed_ms;
4815 }
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?
Jon
On 6/28/2016 5:19 AM, Thomas Schatzl wrote:
> Hi all,
>
> On Mon, 2016-06-27 at 14:19 +0200, Thomas Schatzl wrote:
>> Hi all,
>>
>> can I have reviews for the following change that changes the
>> collection set to use an external array of region ids instead of
>> linking them through the HeapRegion class.
>>
> I got some feedback from Erik Helin about this change. These are
>
> - we do not really need the multiple-writer/multiple-reader
> implementation to store the list of collection set regions. We only
> ever have one concurrent reader and one concurrent writer to it.
>
> So I simplified the data structure to use only storestore/loadload
> barriers for synchronization. The relevant changes got so small that an
> extra data structure was not warranted, so I removed it.
>
> - I strengthened (added) some asserts about some methods that should
> only be called by the vm thread at a safepoint to support this. Just to
> indicate that in these methods we do not need the memory barriers.
>
> - fixed a bug in the collection set iteration where the
> HeapRegionClosure::incomplete() method has not been called if the
> iteration was aborted.
>
> - some cleanup
>
> Webrev:
> http://cr.openjdk.java.net/~tschatzl/8159978/webrev.1 (full)
> http://cr.openjdk.java.net/~tschatzl/8159978/webrev.0_to_1/ (diff
>
> Testing:
> jprt
>
> Thanks,
> Thomas
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20160628/bb0c0877/attachment.htm>
More information about the hotspot-gc-dev
mailing list