RFR (S) JDK-8085983, G1CollectedHeap::collection_set_iterate_from() has unused code and can be simplified

Derek White derek.white at oracle.com
Thu Mar 17 22:45:09 UTC 2016


Possible pre-existing bug, see below...

On 3/17/16 6:34 PM, Derek White wrote:
> On 3/10/16 3:10 PM, Joseph Provino wrote:
>> Please review these changes.
>>
>> CR: JDK-8085983 G1CollectedHeap::collection_set_iterate_from() has 
>> unused code and can be simplified 
>> <https://bugs.openjdk.java.net/browse/JDK-8085983>
>>
>> Webrev: http://cr.openjdk.java.net/~jprovino/8085983/webrev.02
>>
>> Thanks.
>>
>> joe
> Hi Joe,
> Here are my comments.  The last issue looks serious, but I suggested 
> several possible solutions.
>
> heapRegionManager.hpp
>  - Copyright
>
>   - Line 267: too many b's
>      - Does iterate really call doHeapRegionAbortabble()? (sp)
>
> heapRegionManager.inline.hpp
>  - Odd spacing at line 102.
>
>  - In HeapRegionManager::iterate(), line 118:
>    - Should be calling HeapRegionManager::do_heap_region() here, so 
> iterate can abort?
>       Wait! What happened to the call to incomplete()?

And why didn't the old (or new) par_iterate() call blk->incomplete(); 
when bailing out of iteration? I think the current callers of 
par_iterate() don't check for complete() iterations, but that's waiting 
to happen.
> Wait! not all Closure objects have an incomplete() method, only
>    AbortableHeapRegionClosures.
>
>    OK, one fix would be to catch the abort condition in
>    HeapRegionManager::do_heap_region(AbortableHeapRegionClosure, *):
>
>     bool do_heap_region(AbortableHeapRegionClosure* blk, HeapRegion* 
> r) const {
>       bool res = blk->doHeapRegion(r);
>       if (res) {
>         blk->incomplete();
>       }
>       return res;
>     }
>
>    But this means that the _complete field is only valid if
>    AbortableHeapRegionClosure::doHeapRegion() is only called from the
>    new method above. Could enforce this by making doHeapRegion()
>    private and making HeapRegionManager a friend.
>
>    Alternatively, if we want doHeapRegion() callable from other
>    places, we could have a public non-virtual doHeapRegion() method
>    that is a wrapper around a protected virtual doHeapRegionWork()
>    method. The wrapper calls  doHeapRegionWork() and calls
>    incomplete() if it return TRUE. But this means renaming all of the
>    overriden method implementations (or could do it in reverse and
>    rename the wrapper and all of it's callers).
>
>    Alternatively (3rd option), we could make the
>    AbortableHeapRegionClosure::doHeapRegion() overrides all 
> responsible for
>    calling incomplete() if they return true.
>
>    Anyone have an opinion here? Am I calling wolf on this issue?
>
> OK, what were we simplifying again in this RFE? :-)
>
>  - Derek

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/hotspot-gc-dev/attachments/20160317/1166786a/attachment.htm>


More information about the hotspot-gc-dev mailing list