RFR: 8144052: mark_card_deferred does not need to check g1_young_gen
Thomas Schatzl
thomas.schatzl at oracle.com
Wed Nov 25 15:35:21 UTC 2015
Hi Erik,
On Wed, 2015-11-25 at 16:24 +0100, Erik Helin wrote:
> Hi all,
>
> this patch removes an unneeded if statement from
> G1SATBCardTableModRefBS::mark_card_deferred. mark_card_deferred is only
> called from two places:
> - UpdateRSetDeferred::do_oop_nv
> - G1ParScanThreadState::update_rs
>
> In the case of UpdateRSetDeferred::do_oop_nv, the check is always false
> because we clear the card table in
> cleanup_after_oops_into_collection_set_do prior to calling
> remove_self_forwarding_pointers.
>
> In the case of G1ParScanThreadState::update_rs, then we can update the
> check whether to mark a card or not to check !from->is_young instead of
> !from->is_survivor.
>
> Therefore, the if statement:
> if (val == g1_young_gen) {
> return false;
> }
> can be removed from G1SATBCardTableModRefBS::mark_card_deferred.
>
> Bug:
> https://bugs.openjdk.java.net/browse/JDK-8144052
>
> Webrev:
> http://cr.openjdk.java.net/~ehelin/8144052/webrev.00/
>
> Testing:
> - GC test suite with full verification
looks good, except that I would like to ask you to add an assertion
with some good message to G1SATBCardTableModRefBS::mark_card_deferred
that checks that we are not calling it on a young gen region.
Thanks,
Thomas
More information about the hotspot-gc-dev
mailing list