comparison src/share/vm/gc_implementation/g1/g1RemSet.cpp @ 640:ba50942c8138

Merge
author tonyp
date Wed, 18 Mar 2009 11:37:48 -0400
parents 7bb995fbd3c0 2a5da27ccae9
children 2314b7336582
comparison
equal deleted inserted replaced
629:2581d90c6c9b 640:ba50942c8138
500 count_cl.mx(), count_cl.mxr()); 500 count_cl.mx(), count_cl.mxr());
501 count_cl.print_histo(); 501 count_cl.print_histo();
502 } 502 }
503 503
504 if (ParallelGCThreads > 0) { 504 if (ParallelGCThreads > 0) {
505 // This is a temporary change to serialize the update and scanning 505 // The two flags below were introduced temporarily to serialize
506 // of remembered sets. There are some race conditions when this is 506 // the updating and scanning of remembered sets. There are some
507 // done in parallel and they are causing failures. When we resolve 507 // race conditions when these two operations are done in parallel
508 // said race conditions, we'll revert back to parallel remembered 508 // and they are causing failures. When we resolve said race
509 // set updating and scanning. See CRs 6677707 and 6677708. 509 // conditions, we'll revert back to parallel remembered set
510 if (worker_i == 0) { 510 // updating and scanning. See CRs 6677707 and 6677708.
511 if (G1EnableParallelRSetUpdating || (worker_i == 0)) {
511 updateRS(worker_i); 512 updateRS(worker_i);
512 scanNewRefsRS(oc, worker_i); 513 scanNewRefsRS(oc, worker_i);
514 }
515 if (G1EnableParallelRSetScanning || (worker_i == 0)) {
513 scanRS(oc, worker_i); 516 scanRS(oc, worker_i);
514 } 517 }
515 } else { 518 } else {
516 assert(worker_i == 0, "invariant"); 519 assert(worker_i == 0, "invariant");
517 updateRS(0); 520 updateRS(0);
714 {} 717 {}
715 718
716 bool doHeapRegion(HeapRegion* r) { 719 bool doHeapRegion(HeapRegion* r) {
717 if (!r->in_collection_set() && 720 if (!r->in_collection_set() &&
718 !r->continuesHumongous() && 721 !r->continuesHumongous() &&
719 !r->is_young() && 722 !r->is_young()) {
720 !r->is_survivor()) {
721 _update_rs_oop_cl.set_from(r); 723 _update_rs_oop_cl.set_from(r);
722 UpdateRSObjectClosure update_rs_obj_cl(&_update_rs_oop_cl); 724 UpdateRSObjectClosure update_rs_obj_cl(&_update_rs_oop_cl);
723 725
724 // For each run of dirty card in the region: 726 // For each run of dirty card in the region:
725 // 1) Clear the cards. 727 // 1) Clear the cards.
852 // as a result, it is possible for other threads to actually 854 // as a result, it is possible for other threads to actually
853 // allocate objects in the region (after the acquire the lock) 855 // allocate objects in the region (after the acquire the lock)
854 // before all the cards on the region are dirtied. This is unlikely, 856 // before all the cards on the region are dirtied. This is unlikely,
855 // and it doesn't happen often, but it can happen. So, the extra 857 // and it doesn't happen often, but it can happen. So, the extra
856 // check below filters out those cards. 858 // check below filters out those cards.
857 if (r->is_young() || r->is_survivor()) { 859 if (r->is_young()) {
858 return; 860 return;
859 } 861 }
860 // While we are processing RSet buffers during the collection, we 862 // While we are processing RSet buffers during the collection, we
861 // actually don't want to scan any cards on the collection set, 863 // actually don't want to scan any cards on the collection set,
862 // since we don't want to update remebered sets with entries that 864 // since we don't want to update remebered sets with entries that
1023 HeapRegionRemSet::n_coarsenings()); 1025 HeapRegionRemSet::n_coarsenings());
1024 1026
1025 } 1027 }
1026 } 1028 }
1027 void HRInto_G1RemSet::prepare_for_verify() { 1029 void HRInto_G1RemSet::prepare_for_verify() {
1028 if (G1HRRSFlushLogBuffersOnVerify && VerifyBeforeGC && !_g1->full_collection()) { 1030 if (G1HRRSFlushLogBuffersOnVerify &&
1031 (VerifyBeforeGC || VerifyAfterGC)
1032 && !_g1->full_collection()) {
1029 cleanupHRRS(); 1033 cleanupHRRS();
1030 _g1->set_refine_cte_cl_concurrency(false); 1034 _g1->set_refine_cte_cl_concurrency(false);
1031 if (SafepointSynchronize::is_at_safepoint()) { 1035 if (SafepointSynchronize::is_at_safepoint()) {
1032 DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set(); 1036 DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
1033 dcqs.concatenate_logs(); 1037 dcqs.concatenate_logs();
1034 } 1038 }
1035 bool cg1r_use_cache = _cg1r->use_cache(); 1039 bool cg1r_use_cache = _cg1r->use_cache();
1036 _cg1r->set_use_cache(false); 1040 _cg1r->set_use_cache(false);
1037 updateRS(0); 1041 updateRS(0);
1038 _cg1r->set_use_cache(cg1r_use_cache); 1042 _cg1r->set_use_cache(cg1r_use_cache);
1039 } 1043
1040 } 1044 assert(JavaThread::dirty_card_queue_set().completed_buffers_num() == 0, "All should be consumed");
1045 }
1046 }