RFR (M): 8159978: Use an array to store the collection set regions instead of linking through regions
Erik Helin
erik.helin at oracle.com
Thu Jun 30 16:02:36 UTC 2016
On 2016-06-29, 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.
>
> 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.
>
>
> > [..]
>
> > 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.
>
> 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)
Looks good, Reviewed. Nice work Thomas!
Erik
> 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
>
> Testing:
> jprt
>
> Thanks,
> Thomas
>
More information about the hotspot-gc-dev
mailing list