RFR(S): JDK-8040002: Clean up code and code duplication in re-diryting cards for verification

Thomas Schatzl thomas.schatzl at oracle.com
Wed Apr 16 08:59:40 UTC 2014


Hi Jon,

On Tue, 2014-04-15 at 07:24 -0700, Jon Masamitsu wrote:
> Thomas,
> 
> http://cr.openjdk.java.net/~tschatzl/8040002/webrev/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp.frames.html
> 
> Changes look good.
> 
> Just a clarification.
> 
> So the is_in_reserved() test was an attempt to
> make do_card_ptr() faster?
> 
>   163   bool do_card_ptr(jbyte* card_ptr, uint worker_i) {
>   164     if (_g1h->is_in_reserved(_ctbs->addr_for(card_ptr))) {
>   165       _calls++;
>   166       *card_ptr = 0;
>   167     }
>   168     return true;
>   169   }
> 
> 
> And the assertion checking that addr_for() does on the
> address card_ptr is not needed?

Actually I think the whole check is superfluous, also in jdk7.
Is_in_reserved() checks whether the card is in the heap (including perm
gen), and addr_for() also checks the same before and after converting
the card address to a heap address.

However cards can only ever be in the heap anyway - if they are not,
this is an error.

This check is almost like an instance of of "if (something_true) {...}
else { guarantee(!false, "paranoia"); }" seen in other places in G1
code.

I can add an assert here if you think it is useful.

Thomas





More information about the hotspot-gc-dev mailing list