RFR (L): 8067433: Keep waste at end of regions for further allocation during GC
Tom Benson
tom.benson at oracle.com
Thu Oct 15 14:09:38 UTC 2015
Hi Thomas,
All looks good to me! Thanks,
Tom
On 10/15/2015 9:02 AM, Thomas Schatzl wrote:
> Hi Tom,
>
> thanks for the review...
>
> On Wed, 2015-10-14 at 16:00 -0400, Tom Benson wrote:
>> Hi Thomas,
>> Here are some review comments on the code, mostly superficial. I think
>> it's a great addition.
>>
>> - retainedRegionsList.hpp -
>>
>> 37 // considered not worth further allocating into are automatically
>> retired, while
>> 38 // we keep onto regions that still contain a reasonable amount of
>> bytes.
>>
>> Perhaps should be "... we keep holding onto ..."
>>
> Fixed.
>
>> 43 // Note that after appending a region to this list, threads might
>> still allocate
>> 44 // from these regions.
>>
>> Can a little more of the comments you made in your mail message be
>> included here? That comment talks about threads that already have refs
>> to this region continuing to try to use it, while the above sounds like
>> it means threads traversing the list and and trying to allocate from
>> regions on it in place.
>>
> Fixed.
>
>> 74 // Add the given region to this list.
>> 75 void append(HeapRegion* r);
>> 76 // Get a region with at least min_size available space and
>> allocate up to
>>
>> min_size should be min_word_size. Do you want a blank line at 76?
>>
> Fixed.
>
>> - retainedRegionsList.cpp -
>>
>> 41 void RetainedRegionsList::add_to_list(HeapRegion** list,
>> HeapRegion* region) {
>>
>> The assertion here that walks the list to make sure the count is right
>> after adding a new element seems like overkill to me... but OK. But as
>> long as you're doing that, you could also check that the element you're
>> about to add isn't already there. If it was the last element, its
>> next_in_retained would be null, so there would be no assertion failure
>> when it was then added to the head, creating a circular list.
> Fixed.
>
>> 77 if (may_retire_region(remaining_words)) {
>> 78 // Immediately retire.
>> 79 retire_region(r);
>>
>> This comment seems superfluous.
> Removed.
>
>> - heapRegion.hpp -
>>
>> 326 HeapRegion* _next_in_retained;
>> 327 public:
>> 328 void set_next_in_retained(HeapRegion* next) {
>>
>> Blank line before public: ?
> Added
>
>> - heapRegion.inline.hpp -
>>
>> The change to the par_allocate_impl loop is just semi-related 'cleanup,'
>> correct?
>>
> I can split it out, it's just a two-line change though... Basically the
> problem is that it is preferable to reuse the result from any cmpxchg as
> this avoids you to consider whether you need to use volatile.
>
>> - g1AllocRegion.hpp -
>>
>> 96 public:
>> 97 // Perform a MT-safe allocation out of the given region.
>> 98 static inline HeapWord* par_allocate(HeapRegion* alloc_region,
>>
>> Move the now-public par_allocate entries down with the other public entries?
> Done.
>
>> 123 // and desired size in words, and sets that region as new active
>> region.
>>
>> Should be ... and set that region...
> Done.
>
>> 139 // Allocate a new region that is large enough to fit word_size
>> into it.
>> 140 virtual HeapRegion* allocate_new_region(size_t word_size, bool
>> force) = 0;
>> 141 // Allocate a new region and allocate word_size words into it,
>> returning both the
>>
>> word_size should be min_word_size. Perhaps say "allocate at least
>> min_word_size words...".
> Done. Thanks for looking through the comments btw.
>
>> 205 void G1AllocRegion::release_during_gc() {
>>
>> This name seems confusing to me. G1AllocRegions's release_during_gc
>> always does release, while G1GCAllocRegion's release_during_gc will
>> either add to the retained list, or retire if the remaining space is
>> below threshold. new_alloc_region_and_allocate invokes one or the other
>> of these. Maybe "release_or_retain" would be a better name?
> I changed it to release_or_retain_during_gc and added some hopefully
> better comment.
>
>> - g1_globals.hpp -
>>
>> Is the new option really necessary? It doesn't seem there would be a
>> benefit from disabling it, other than working around a bug.
> That's the intention. If you think it is not necessary I can remove it,
> I think the change is good.
>
> New webrevs at
> http://cr.openjdk.java.net/~tschatzl/8067433/webrev.2/ (full)
> http://cr.openjdk.java.net/~tschatzl/8067433/webrev.1_to_2/ (diff)
>
> Thanks,
> Thomas
>
>
More information about the hotspot-gc-dev
mailing list