Mercurial > hg > truffle
comparison src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @ 751:20c6f43950b5
6490395: G1: Tidy up command line flags.
Summary: Change G1 flag names to be more consistent and disable some in 'product' mode.
Reviewed-by: tonyp, iveresov
author | johnc |
---|---|
date | Thu, 30 Apr 2009 15:07:53 -0700 |
parents | 4ac7d97e6101 |
children | 315a5d70b295 |
comparison
equal
deleted
inserted
replaced
748:51285b431bb2 | 751:20c6f43950b5 |
---|---|
526 (!res->isHumongous() && | 526 (!res->isHumongous() && |
527 (!zero_filled || | 527 (!zero_filled || |
528 res->zero_fill_state() == HeapRegion::Allocated)), | 528 res->zero_fill_state() == HeapRegion::Allocated)), |
529 "Non-young alloc Regions must be zero filled (and non-H)"); | 529 "Non-young alloc Regions must be zero filled (and non-H)"); |
530 | 530 |
531 if (G1TraceRegions) { | 531 if (G1PrintRegions) { |
532 if (res != NULL) { | 532 if (res != NULL) { |
533 gclog_or_tty->print_cr("new alloc region %d:["PTR_FORMAT", "PTR_FORMAT"], " | 533 gclog_or_tty->print_cr("new alloc region %d:["PTR_FORMAT", "PTR_FORMAT"], " |
534 "top "PTR_FORMAT, | 534 "top "PTR_FORMAT, |
535 res->hrs_index(), res->bottom(), res->end(), res->top()); | 535 res->hrs_index(), res->bottom(), res->end(), res->top()); |
536 } | 536 } |
2280 if (TraceGen0Time || TraceGen1Time) { | 2280 if (TraceGen0Time || TraceGen1Time) { |
2281 // The "G1CollectorPolicy" is keeping track of these stats, so delegate | 2281 // The "G1CollectorPolicy" is keeping track of these stats, so delegate |
2282 // to that. | 2282 // to that. |
2283 g1_policy()->print_tracing_info(); | 2283 g1_policy()->print_tracing_info(); |
2284 } | 2284 } |
2285 if (SummarizeG1RSStats) { | 2285 if (G1SummarizeRSetStats) { |
2286 g1_rem_set()->print_summary_info(); | 2286 g1_rem_set()->print_summary_info(); |
2287 } | 2287 } |
2288 if (SummarizeG1ConcMark) { | 2288 if (G1SummarizeConcurrentMark) { |
2289 concurrent_mark()->print_summary_info(); | 2289 concurrent_mark()->print_summary_info(); |
2290 } | 2290 } |
2291 if (SummarizeG1ZFStats) { | 2291 if (G1SummarizeZFStats) { |
2292 ConcurrentZFThread::print_summary_info(); | 2292 ConcurrentZFThread::print_summary_info(); |
2293 } | 2293 } |
2294 g1_policy()->print_yg_surv_rate_info(); | 2294 g1_policy()->print_yg_surv_rate_info(); |
2295 | 2295 |
2296 GCOverheadReporter::printGCOverhead(); | 2296 GCOverheadReporter::printGCOverhead(); |
3253 preserve_mark_if_necessary(old, m); | 3253 preserve_mark_if_necessary(old, m); |
3254 | 3254 |
3255 HeapRegion* r = heap_region_containing(old); | 3255 HeapRegion* r = heap_region_containing(old); |
3256 if (!r->evacuation_failed()) { | 3256 if (!r->evacuation_failed()) { |
3257 r->set_evacuation_failed(true); | 3257 r->set_evacuation_failed(true); |
3258 if (G1TraceRegions) { | 3258 if (G1PrintRegions) { |
3259 gclog_or_tty->print("evacuation failed in heap region "PTR_FORMAT" " | 3259 gclog_or_tty->print("evacuation failed in heap region "PTR_FORMAT" " |
3260 "["PTR_FORMAT","PTR_FORMAT")\n", | 3260 "["PTR_FORMAT","PTR_FORMAT")\n", |
3261 r, r->bottom(), r->end()); | 3261 r, r->bottom(), r->end()); |
3262 } | 3262 } |
3263 } | 3263 } |
3464 static size_t bitmap_word_covers_words() { | 3464 static size_t bitmap_word_covers_words() { |
3465 return BitsPerWord << shifter(); | 3465 return BitsPerWord << shifter(); |
3466 } | 3466 } |
3467 | 3467 |
3468 static size_t gclab_word_size() { | 3468 static size_t gclab_word_size() { |
3469 return ParallelGCG1AllocBufferSize / HeapWordSize; | 3469 return G1ParallelGCAllocBufferSize / HeapWordSize; |
3470 } | 3470 } |
3471 | 3471 |
3472 static size_t bitmap_size_in_bits() { | 3472 static size_t bitmap_size_in_bits() { |
3473 size_t bits_in_bitmap = gclab_word_size() >> shifter(); | 3473 size_t bits_in_bitmap = gclab_word_size() >> shifter(); |
3474 // We are going to ensure that the beginning of a word in this | 3474 // We are going to ensure that the beginning of a word in this |
3614 bool _during_marking; | 3614 bool _during_marking; |
3615 GCLabBitMap _bitmap; | 3615 GCLabBitMap _bitmap; |
3616 | 3616 |
3617 public: | 3617 public: |
3618 G1ParGCAllocBuffer() : | 3618 G1ParGCAllocBuffer() : |
3619 ParGCAllocBuffer(ParallelGCG1AllocBufferSize / HeapWordSize), | 3619 ParGCAllocBuffer(G1ParallelGCAllocBufferSize / HeapWordSize), |
3620 _during_marking(G1CollectedHeap::heap()->mark_in_progress()), | 3620 _during_marking(G1CollectedHeap::heap()->mark_in_progress()), |
3621 _bitmap(G1CollectedHeap::heap()->reserved_region().start()), | 3621 _bitmap(G1CollectedHeap::heap()->reserved_region().start()), |
3622 _retired(false) | 3622 _retired(false) |
3623 { } | 3623 { } |
3624 | 3624 |
3810 | 3810 |
3811 HeapWord* allocate_slow(GCAllocPurpose purpose, size_t word_sz) { | 3811 HeapWord* allocate_slow(GCAllocPurpose purpose, size_t word_sz) { |
3812 | 3812 |
3813 HeapWord* obj = NULL; | 3813 HeapWord* obj = NULL; |
3814 if (word_sz * 100 < | 3814 if (word_sz * 100 < |
3815 (size_t)(ParallelGCG1AllocBufferSize / HeapWordSize) * | 3815 (size_t)(G1ParallelGCAllocBufferSize / HeapWordSize) * |
3816 ParallelGCBufferWastePct) { | 3816 ParallelGCBufferWastePct) { |
3817 G1ParGCAllocBuffer* alloc_buf = alloc_buffer(purpose); | 3817 G1ParGCAllocBuffer* alloc_buf = alloc_buffer(purpose); |
3818 add_to_alloc_buffer_waste(alloc_buf->words_remaining()); | 3818 add_to_alloc_buffer_waste(alloc_buf->words_remaining()); |
3819 alloc_buf->retire(false, false); | 3819 alloc_buf->retire(false, false); |
3820 | 3820 |
3821 HeapWord* buf = | 3821 HeapWord* buf = |
3822 _g1h->par_allocate_during_gc(purpose, ParallelGCG1AllocBufferSize / HeapWordSize); | 3822 _g1h->par_allocate_during_gc(purpose, G1ParallelGCAllocBufferSize / HeapWordSize); |
3823 if (buf == NULL) return NULL; // Let caller handle allocation failure. | 3823 if (buf == NULL) return NULL; // Let caller handle allocation failure. |
3824 // Otherwise. | 3824 // Otherwise. |
3825 alloc_buf->set_buf(buf); | 3825 alloc_buf->set_buf(buf); |
3826 | 3826 |
3827 obj = alloc_buf->allocate(word_sz); | 3827 obj = alloc_buf->allocate(word_sz); |
4329 double elapsed_ms = (os::elapsedTime()-start)*1000.0; | 4329 double elapsed_ms = (os::elapsedTime()-start)*1000.0; |
4330 double term_ms = pss.term_time()*1000.0; | 4330 double term_ms = pss.term_time()*1000.0; |
4331 _g1h->g1_policy()->record_obj_copy_time(i, elapsed_ms-term_ms); | 4331 _g1h->g1_policy()->record_obj_copy_time(i, elapsed_ms-term_ms); |
4332 _g1h->g1_policy()->record_termination_time(i, term_ms); | 4332 _g1h->g1_policy()->record_termination_time(i, term_ms); |
4333 } | 4333 } |
4334 if (G1UseSurvivorSpace) { | 4334 if (G1UseSurvivorSpaces) { |
4335 _g1h->g1_policy()->record_thread_age_table(pss.age_table()); | 4335 _g1h->g1_policy()->record_thread_age_table(pss.age_table()); |
4336 } | 4336 } |
4337 _g1h->update_surviving_young_words(pss.surviving_young_words()+1); | 4337 _g1h->update_surviving_young_words(pss.surviving_young_words()+1); |
4338 | 4338 |
4339 // Clean up any par-expanded rem sets. | 4339 // Clean up any par-expanded rem sets. |
4433 double mark_stack_scan_ms = (os::elapsedTime() - ext_roots_end) * 1000.0; | 4433 double mark_stack_scan_ms = (os::elapsedTime() - ext_roots_end) * 1000.0; |
4434 g1_policy()->record_mark_stack_scan_time(worker_i, mark_stack_scan_ms); | 4434 g1_policy()->record_mark_stack_scan_time(worker_i, mark_stack_scan_ms); |
4435 | 4435 |
4436 // XXX What should this be doing in the parallel case? | 4436 // XXX What should this be doing in the parallel case? |
4437 g1_policy()->record_collection_pause_end_CH_strong_roots(); | 4437 g1_policy()->record_collection_pause_end_CH_strong_roots(); |
4438 if (G1VerifyRemSet) { | |
4439 // :::: FIXME :::: | |
4440 // The stupid remembered set doesn't know how to filter out dead | |
4441 // objects, which the smart one does, and so when it is created | |
4442 // and then compared the number of entries in each differs and | |
4443 // the verification code fails. | |
4444 guarantee(false, "verification code is broken, see note"); | |
4445 | |
4446 // Let's make sure that the current rem set agrees with the stupidest | |
4447 // one possible! | |
4448 bool refs_enabled = ref_processor()->discovery_enabled(); | |
4449 if (refs_enabled) ref_processor()->disable_discovery(); | |
4450 StupidG1RemSet stupid(this); | |
4451 count_closure.n = 0; | |
4452 stupid.oops_into_collection_set_do(&count_closure, worker_i); | |
4453 int stupid_n = count_closure.n; | |
4454 count_closure.n = 0; | |
4455 g1_rem_set()->oops_into_collection_set_do(&count_closure, worker_i); | |
4456 guarantee(count_closure.n == stupid_n, "Old and new rem sets differ."); | |
4457 gclog_or_tty->print_cr("\nFound %d pointers in heap RS.", count_closure.n); | |
4458 if (refs_enabled) ref_processor()->enable_discovery(); | |
4459 } | |
4460 if (scan_so != NULL) { | 4438 if (scan_so != NULL) { |
4461 scan_scan_only_set(scan_so, worker_i); | 4439 scan_scan_only_set(scan_so, worker_i); |
4462 } | 4440 } |
4463 // Now scan the complement of the collection set. | 4441 // Now scan the complement of the collection set. |
4464 if (scan_rs != NULL) { | 4442 if (scan_rs != NULL) { |