RFR(S): 8007772: G1: assert(!hr->isHumongous() || mr.start() == hr->bottom()) failed: the start of HeapRegion and MemRegion should be consistent for humongous regions

Jesper Wilhelmsson jesper.wilhelmsson at oracle.com
Mon Feb 11 20:51:25 UTC 2013


On 11/2/13 9:28 PM, John Cuthbertson wrote:
> Hi Jesper,
>
> On 2/11/2013 10:48 AM, Jesper Wilhelmsson wrote:
>> John,
>>
>> Would it make sense to replace this code
> [snip]
>>
>> with this code
>>
>>
>> bool start_of_humongous = _curr_region->isHumongous() &&
>>                           mr.start() == _curr_region->bottom();
>>
>> if (mr.is_empty() || start_of_humongous ||
>>     _nextMarkBitMap->iterate(&bitmap_closure, mr)) {
>>
>>   if (start_of_humongous && _nextMarkBitMap->isMarked(mr.start())) {
>>     // The object is marked - apply the closure
>>     BitMap::idx_t offset = _nextMarkBitMap->heapWordToOffset(mr.start());
>>     bitmap_closure.do_bit(offset);
>>   }
>>   // Even if this task aborted while scanning the humongous object
>>   // we can (and should) give up the current region.
>>   giveup_current_region();
>>   regular_clock_call();
>> } else {
>>
>
> Sure, semantically they're the same but it it any clearer?  You have to study
> the code and remember short-circuiting to realize that, if the h-obj was marked,
> then we would not be applying the bitmap closure twice (one in the iterate call
> and once directly), and (if the object is not marked) that there's no redundant
> scanning of the bitmap.

I guess it's a matter of taste, to me it is a lot clearer. But sure, it takes a 
second look at the code to see that short-circuiting matters here.

The version with code duplication is a bit confusing to me and requires a second 
look to see that there is no difference between the different clauses in the 
if/else if.

I would argue that for someone who is new to the code, the non-duplicated code 
would be easier to get familiar with due to (at a first glance) less complicated 
code. And you don't have to know that the short-circuiting is necessary until 
you know the code well enough to realize that it is necessary, if you see what I 
mean.

We could also add a comment :-)
/Jesper


>
> JohnC



More information about the hotspot-gc-dev mailing list