comparison src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @ 794:315a5d70b295

6484957: G1: parallel concurrent refinement 6826318: G1: remove traversal-based refinement code Summary: Removed traversal-based refinement code as it's no longer used. Made the concurrent refinement (queue-based) parallel. Reviewed-by: tonyp
author iveresov
date Mon, 11 May 2009 16:30:56 -0700
parents 20c6f43950b5
children 29e7d79232b9
comparison
equal deleted inserted replaced
758:9b3a41ccc927 794:315a5d70b295
445 445
446 gclog_or_tty->print_cr(""); 446 gclog_or_tty->print_cr("");
447 } 447 }
448 448
449 void G1CollectedHeap::stop_conc_gc_threads() { 449 void G1CollectedHeap::stop_conc_gc_threads() {
450 _cg1r->cg1rThread()->stop(); 450 _cg1r->stop();
451 _czft->stop(); 451 _czft->stop();
452 _cmThread->stop(); 452 _cmThread->stop();
453 } 453 }
454 454
455 455
999 ParallelTaskTerminator::print_termination_counts(); 999 ParallelTaskTerminator::print_termination_counts();
1000 #endif 1000 #endif
1001 1001
1002 gc_epilogue(true); 1002 gc_epilogue(true);
1003 1003
1004 // Abandon concurrent refinement. This must happen last: in the 1004 // Discard all rset updates
1005 // dirty-card logging system, some cards may be dirty by weak-ref 1005 JavaThread::dirty_card_queue_set().abandon_logs();
1006 // processing, and may be enqueued. But the whole card table is
1007 // dirtied, so this should abandon those logs, and set "do_traversal"
1008 // to true.
1009 concurrent_g1_refine()->set_pya_restart();
1010 assert(!G1DeferredRSUpdate 1006 assert(!G1DeferredRSUpdate
1011 || (G1DeferredRSUpdate && (dirty_card_queue_set().completed_buffers_num() == 0)), "Should not be any"); 1007 || (G1DeferredRSUpdate && (dirty_card_queue_set().completed_buffers_num() == 0)), "Should not be any");
1012 assert(regions_accounted_for(), "Region leakage!"); 1008 assert(regions_accounted_for(), "Region leakage!");
1013 } 1009 }
1014 1010
1519 1515
1520 JavaThread::satb_mark_queue_set().initialize(SATB_Q_CBL_mon, 1516 JavaThread::satb_mark_queue_set().initialize(SATB_Q_CBL_mon,
1521 SATB_Q_FL_lock, 1517 SATB_Q_FL_lock,
1522 0, 1518 0,
1523 Shared_SATB_Q_lock); 1519 Shared_SATB_Q_lock);
1524 if (G1RSBarrierUseQueue) { 1520
1525 JavaThread::dirty_card_queue_set().initialize(DirtyCardQ_CBL_mon, 1521 JavaThread::dirty_card_queue_set().initialize(DirtyCardQ_CBL_mon,
1526 DirtyCardQ_FL_lock, 1522 DirtyCardQ_FL_lock,
1527 G1DirtyCardQueueMax, 1523 G1DirtyCardQueueMax,
1528 Shared_DirtyCardQ_lock); 1524 Shared_DirtyCardQ_lock);
1529 } 1525
1530 if (G1DeferredRSUpdate) { 1526 if (G1DeferredRSUpdate) {
1531 dirty_card_queue_set().initialize(DirtyCardQ_CBL_mon, 1527 dirty_card_queue_set().initialize(DirtyCardQ_CBL_mon,
1532 DirtyCardQ_FL_lock, 1528 DirtyCardQ_FL_lock,
1533 0, 1529 0,
1534 Shared_DirtyCardQ_lock, 1530 Shared_DirtyCardQ_lock,
2247 void G1CollectedHeap::print_on(outputStream* st) const { 2243 void G1CollectedHeap::print_on(outputStream* st) const {
2248 PrintRegionClosure blk(st); 2244 PrintRegionClosure blk(st);
2249 _hrs->iterate(&blk); 2245 _hrs->iterate(&blk);
2250 } 2246 }
2251 2247
2248 class PrintOnThreadsClosure : public ThreadClosure {
2249 outputStream* _st;
2250 public:
2251 PrintOnThreadsClosure(outputStream* st) : _st(st) { }
2252 virtual void do_thread(Thread *t) {
2253 t->print_on(_st);
2254 }
2255 };
2256
2252 void G1CollectedHeap::print_gc_threads_on(outputStream* st) const { 2257 void G1CollectedHeap::print_gc_threads_on(outputStream* st) const {
2253 if (ParallelGCThreads > 0) { 2258 if (ParallelGCThreads > 0) {
2254 workers()->print_worker_threads(); 2259 workers()->print_worker_threads();
2255 } 2260 }
2256 st->print("\"G1 concurrent mark GC Thread\" "); 2261 st->print("\"G1 concurrent mark GC Thread\" ");
2257 _cmThread->print(); 2262 _cmThread->print();
2258 st->cr(); 2263 st->cr();
2259 st->print("\"G1 concurrent refinement GC Thread\" "); 2264 st->print("\"G1 concurrent refinement GC Threads\" ");
2260 _cg1r->cg1rThread()->print_on(st); 2265 PrintOnThreadsClosure p(st);
2266 _cg1r->threads_do(&p);
2261 st->cr(); 2267 st->cr();
2262 st->print("\"G1 zero-fill GC Thread\" "); 2268 st->print("\"G1 zero-fill GC Thread\" ");
2263 _czft->print_on(st); 2269 _czft->print_on(st);
2264 st->cr(); 2270 st->cr();
2265 } 2271 }
2267 void G1CollectedHeap::gc_threads_do(ThreadClosure* tc) const { 2273 void G1CollectedHeap::gc_threads_do(ThreadClosure* tc) const {
2268 if (ParallelGCThreads > 0) { 2274 if (ParallelGCThreads > 0) {
2269 workers()->threads_do(tc); 2275 workers()->threads_do(tc);
2270 } 2276 }
2271 tc->do_thread(_cmThread); 2277 tc->do_thread(_cmThread);
2272 tc->do_thread(_cg1r->cg1rThread()); 2278 _cg1r->threads_do(tc);
2273 tc->do_thread(_czft); 2279 tc->do_thread(_czft);
2274 } 2280 }
2275 2281
2276 void G1CollectedHeap::print_tracing_info() const { 2282 void G1CollectedHeap::print_tracing_info() const {
2277 concurrent_g1_refine()->print_final_card_counts(); 2283 concurrent_g1_refine()->print_final_card_counts();