src/share/vm/gc_implementation/g1/g1RemSet.cpp

Print this page
rev 4702 : 8015244: G1: Verification after a full GC is incorrectly placed.
Summary: In a full GC, move the verification after the GC to after RSet rebuilding. Verify RSet entries during a full GC under control of a flag.
Reviewed-by:


 773   gclog_or_tty->print_cr("  Static structures = "SIZE_FORMAT"K,"
 774                          " free_lists = "SIZE_FORMAT"K.",
 775                          HeapRegionRemSet::static_mem_size() / K,
 776                          HeapRegionRemSet::fl_mem_size() / K);
 777   gclog_or_tty->print_cr("    "SIZE_FORMAT" occupied cards represented.",
 778                          blk.occupied());
 779   HeapRegion* max_mem_sz_region = blk.max_mem_sz_region();
 780   HeapRegionRemSet* rem_set = max_mem_sz_region->rem_set();
 781   gclog_or_tty->print_cr("    Max size region = "HR_FORMAT", "
 782                          "size = "SIZE_FORMAT "K, occupied = "SIZE_FORMAT"K.",
 783                          HR_FORMAT_PARAMS(max_mem_sz_region),
 784                          (rem_set->mem_size() + K - 1)/K,
 785                          (rem_set->occupied() + K - 1)/K);
 786   gclog_or_tty->print_cr("    Did %d coarsenings.",
 787                          HeapRegionRemSet::n_coarsenings());
 788 }
 789 
 790 void G1RemSet::prepare_for_verify() {
 791   if (G1HRRSFlushLogBuffersOnVerify &&
 792       (VerifyBeforeGC || VerifyAfterGC)
 793       &&  !_g1->full_collection()) {
 794     cleanupHRRS();
 795     _g1->set_refine_cte_cl_concurrency(false);
 796     if (SafepointSynchronize::is_at_safepoint()) {
 797       DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
 798       dcqs.concatenate_logs();
 799     }
 800 
 801     G1HotCardCache* hot_card_cache = _cg1r->hot_card_cache();
 802     bool use_hot_card_cache = hot_card_cache->use_cache();
 803     hot_card_cache->set_use_cache(false);
 804 
 805     DirtyCardQueue into_cset_dcq(&_g1->into_cset_dirty_card_queue_set());
 806     updateRS(&into_cset_dcq, 0);
 807     _g1->into_cset_dirty_card_queue_set().clear();
 808 
 809     hot_card_cache->set_use_cache(use_hot_card_cache);
 810     assert(JavaThread::dirty_card_queue_set().completed_buffers_num() == 0, "All should be consumed");
 811   }
 812 }


 773   gclog_or_tty->print_cr("  Static structures = "SIZE_FORMAT"K,"
 774                          " free_lists = "SIZE_FORMAT"K.",
 775                          HeapRegionRemSet::static_mem_size() / K,
 776                          HeapRegionRemSet::fl_mem_size() / K);
 777   gclog_or_tty->print_cr("    "SIZE_FORMAT" occupied cards represented.",
 778                          blk.occupied());
 779   HeapRegion* max_mem_sz_region = blk.max_mem_sz_region();
 780   HeapRegionRemSet* rem_set = max_mem_sz_region->rem_set();
 781   gclog_or_tty->print_cr("    Max size region = "HR_FORMAT", "
 782                          "size = "SIZE_FORMAT "K, occupied = "SIZE_FORMAT"K.",
 783                          HR_FORMAT_PARAMS(max_mem_sz_region),
 784                          (rem_set->mem_size() + K - 1)/K,
 785                          (rem_set->occupied() + K - 1)/K);
 786   gclog_or_tty->print_cr("    Did %d coarsenings.",
 787                          HeapRegionRemSet::n_coarsenings());
 788 }
 789 
 790 void G1RemSet::prepare_for_verify() {
 791   if (G1HRRSFlushLogBuffersOnVerify &&
 792       (VerifyBeforeGC || VerifyAfterGC)
 793       &&  (!_g1->full_collection() || G1VerifyRSetsDuringFullGC)) {
 794     cleanupHRRS();
 795     _g1->set_refine_cte_cl_concurrency(false);
 796     if (SafepointSynchronize::is_at_safepoint()) {
 797       DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
 798       dcqs.concatenate_logs();
 799     }
 800 
 801     G1HotCardCache* hot_card_cache = _cg1r->hot_card_cache();
 802     bool use_hot_card_cache = hot_card_cache->use_cache();
 803     hot_card_cache->set_use_cache(false);
 804 
 805     DirtyCardQueue into_cset_dcq(&_g1->into_cset_dirty_card_queue_set());
 806     updateRS(&into_cset_dcq, 0);
 807     _g1->into_cset_dirty_card_queue_set().clear();
 808 
 809     hot_card_cache->set_use_cache(use_hot_card_cache);
 810     assert(JavaThread::dirty_card_queue_set().completed_buffers_num() == 0, "All should be consumed");
 811   }
 812 }