RFR (XL): 8054818: Refactor HeapRegionSeq to manage heap region and auxiliary data
Thomas Schatzl
thomas.schatzl at oracle.com
Thu Aug 14 13:37:16 UTC 2014
Hi Mikael,
thanks for the review.
On Thu, 2014-08-14 at 09:47 +0200, Mikael Gerdin wrote:
> On Tuesday 12 August 2014 17.09.04 Thomas Schatzl wrote:
> > Hi all,
> >
> > can I have reviews for this somewhat large refactoring change? It is
> > about refactoring the HeapRegionSeq class to manage heap region and
> > auxiliary data.
> >
> > I.e. currently HeapRegionSeq only manages the HeapRegion instances
> > corresponding to the heap's region. The change gives HeapRegionSeq more
> > responsibilities, encapsulating functionality related to heap memory
> > management. This decreases the amount of responsibilities (and
> > complexity) for the G1CollectedHeap class: decisions about how heap
> > related memory is allocated/freed/iterated (i.e. how the heap regions
> > are actually allocated in the heap) is removed from G1CollectedHeap.
> >
> > This change only changes the interface to this functionality. It is a
> > preparatory change for JDK-8038423 "G1: Decommit memory within the
> > heap", so the change might be slightly more extensive than really
> > required.
> >
> > The RFR for JDK-8038423 will follow to look at it in context.
> >
> > There is another CR that renames HeapRegionSeq to HeapRegionmanager too.
> >
> > CR:
> > https://bugs.openjdk.java.net/browse/JDK-8054818
> >
> > Webrev:
> > http://cr.openjdk.java.net/~tschatzl/8054818/webrev/
>
> It took me a while to figure out that
>
> 50 inline HeapWord* G1CollectedHeap::bottom_addr_for_region(uint index) const
> {
> 51 return _reserved.start() + index * HeapRegion::GrainWords;
> 52 }
>
> Is actually referencing CollectedHeap::_reserved
>
> It's not clear to me if it ever differs from HeapRegionSeq::_reserved but I
> suggest that you use that one instead.
Fixed.
>
> The code which does
> heap_rs.first_part(max_byte_size);
> looks like remnants of perm gen, where the rest of the heap_rs would be the
> reserved memory for the perm gen.
>
> CollectedHeap::_reserved is a protected field but only used in a few places
> where it's initialized by subclasses. I'll file an RFE for it to be made
> private with a protected initialization method instead.
Okay, thanks.
>
>
> heapRegionSeq.hpp
> 177
> 178 MemRegion committed() const { MemRegion temp(heap_bottom(),
> heap_top()); return temp; }
>
> why not just
> return MemRegion(heap_bottom(), heap_top());
>
> 179
> 180 MemRegion reserved() const { MemRegion temp(heap_bottom(), heap_end());
> return temp; }
>
> return MemRegion(heap_bottom(), heap_end());
>
Fixed.
> I didn't look in detail at the humongous allocation code moved from G1CH to
> HRS but I assume that you've tested this :)
Of course :)
New webrev at
http://cr.openjdk.java.net/~tschatzl/8054818/webrev.1
Diff:
http://cr.openjdk.java.net/~tschatzl/8054818/webrev.0_to_1
Testing:
jprt
Thanks,
Thomas
More information about the hotspot-gc-dev
mailing list