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

changeset 9327
f96fcd9e1e1b
parent 8662
9975dd8382d5
child 9342
5792d995ed26
equal deleted inserted replaced
9324:efdbe9b904ad 9327:f96fcd9e1e1b
282 _capacity = new_capacity; 282 _capacity = new_capacity;
283 } else { 283 } else {
284 if (PrintGCDetails && Verbose) { 284 if (PrintGCDetails && Verbose) {
285 // Failed to double capacity, continue; 285 // Failed to double capacity, continue;
286 gclog_or_tty->print(" (benign) Failed to expand marking stack capacity from " 286 gclog_or_tty->print(" (benign) Failed to expand marking stack capacity from "
287 SIZE_FORMAT"K to " SIZE_FORMAT"K", 287 SIZE_FORMAT "K to " SIZE_FORMAT "K",
288 _capacity / K, new_capacity / K); 288 _capacity / K, new_capacity / K);
289 } 289 }
290 } 290 }
291 } 291 }
292 292
579 verbose_level = high_verbose; 579 verbose_level = high_verbose;
580 } 580 }
581 _verbose_level = verbose_level; 581 _verbose_level = verbose_level;
582 582
583 if (verbose_low()) { 583 if (verbose_low()) {
584 gclog_or_tty->print_cr("[global] init, heap start = "PTR_FORMAT", " 584 gclog_or_tty->print_cr("[global] init, heap start = " PTR_FORMAT", "
585 "heap end = " INTPTR_FORMAT, p2i(_heap_start), p2i(_heap_end)); 585 "heap end = " INTPTR_FORMAT, p2i(_heap_start), p2i(_heap_end));
586 } 586 }
587 587
588 _markBitMap1.initialize(g1h->reserved_region(), prev_bitmap_storage); 588 _markBitMap1.initialize(g1h->reserved_region(), prev_bitmap_storage);
589 _markBitMap2.initialize(g1h->reserved_region(), next_bitmap_storage); 589 _markBitMap2.initialize(g1h->reserved_region(), next_bitmap_storage);
835 // We currently assume that the concurrent flag has been set to 835 // We currently assume that the concurrent flag has been set to
836 // false before we start remark. At this point we should also be 836 // false before we start remark. At this point we should also be
837 // in a STW phase. 837 // in a STW phase.
838 assert(!concurrent_marking_in_progress(), "invariant"); 838 assert(!concurrent_marking_in_progress(), "invariant");
839 assert(out_of_regions(), 839 assert(out_of_regions(),
840 err_msg("only way to get here: _finger: "PTR_FORMAT", _heap_end: "PTR_FORMAT, 840 err_msg("only way to get here: _finger: " PTR_FORMAT ", _heap_end: " PTR_FORMAT,
841 p2i(_finger), p2i(_heap_end))); 841 p2i(_finger), p2i(_heap_end)));
842 } 842 }
843 } 843 }
844 844
845 void ConcurrentMark::set_non_marking_state() { 845 void ConcurrentMark::set_non_marking_state() {
1450 HeapWord* ntams = hr->next_top_at_mark_start(); 1450 HeapWord* ntams = hr->next_top_at_mark_start();
1451 HeapWord* start = hr->bottom(); 1451 HeapWord* start = hr->bottom();
1452 1452
1453 assert(start <= hr->end() && start <= ntams && ntams <= hr->end(), 1453 assert(start <= hr->end() && start <= ntams && ntams <= hr->end(),
1454 err_msg("Preconditions not met - " 1454 err_msg("Preconditions not met - "
1455 "start: "PTR_FORMAT", ntams: "PTR_FORMAT", end: "PTR_FORMAT, 1455 "start: " PTR_FORMAT ", ntams: " PTR_FORMAT ", end: " PTR_FORMAT,
1456 p2i(start), p2i(ntams), p2i(hr->end()))); 1456 p2i(start), p2i(ntams), p2i(hr->end())));
1457 1457
1458 // Find the first marked object at or after "start". 1458 // Find the first marked object at or after "start".
1459 start = _bm->getNextMarkedWordAddress(start, ntams); 1459 start = _bm->getNextMarkedWordAddress(start, ntams);
1460 1460
1767 // all the cards spanned by the object 1767 // all the cards spanned by the object
1768 end_idx += 1; 1768 end_idx += 1;
1769 } 1769 }
1770 1770
1771 assert(end_idx <= _card_bm->size(), 1771 assert(end_idx <= _card_bm->size(),
1772 err_msg("oob: end_idx= "SIZE_FORMAT", bitmap size= "SIZE_FORMAT, 1772 err_msg("oob: end_idx= " SIZE_FORMAT ", bitmap size= " SIZE_FORMAT,
1773 end_idx, _card_bm->size())); 1773 end_idx, _card_bm->size()));
1774 assert(start_idx < _card_bm->size(), 1774 assert(start_idx < _card_bm->size(),
1775 err_msg("oob: start_idx= "SIZE_FORMAT", bitmap size= "SIZE_FORMAT, 1775 err_msg("oob: start_idx= " SIZE_FORMAT ", bitmap size= " SIZE_FORMAT,
1776 start_idx, _card_bm->size())); 1776 start_idx, _card_bm->size()));
1777 1777
1778 _cm->set_card_bitmap_range(_card_bm, start_idx, end_idx, true /* is_par */); 1778 _cm->set_card_bitmap_range(_card_bm, start_idx, end_idx, true /* is_par */);
1779 } 1779 }
1780 1780
2275 template <class T> void do_oop_work(T* p) { 2275 template <class T> void do_oop_work(T* p) {
2276 if (!_cm->has_overflown()) { 2276 if (!_cm->has_overflown()) {
2277 oop obj = oopDesc::load_decode_heap_oop(p); 2277 oop obj = oopDesc::load_decode_heap_oop(p);
2278 if (_cm->verbose_high()) { 2278 if (_cm->verbose_high()) {
2279 gclog_or_tty->print_cr("\t[%u] we're looking at location " 2279 gclog_or_tty->print_cr("\t[%u] we're looking at location "
2280 "*"PTR_FORMAT" = "PTR_FORMAT, 2280 "*" PTR_FORMAT " = " PTR_FORMAT,
2281 _task->worker_id(), p2i(p), p2i((void*) obj)); 2281 _task->worker_id(), p2i(p), p2i((void*) obj));
2282 } 2282 }
2283 2283
2284 _task->deal_with_reference(obj); 2284 _task->deal_with_reference(obj);
2285 _ref_counter--; 2285 _ref_counter--;
3016 // we succeeded 3016 // we succeeded
3017 HeapWord* bottom = curr_region->bottom(); 3017 HeapWord* bottom = curr_region->bottom();
3018 HeapWord* limit = curr_region->next_top_at_mark_start(); 3018 HeapWord* limit = curr_region->next_top_at_mark_start();
3019 3019
3020 if (verbose_low()) { 3020 if (verbose_low()) {
3021 gclog_or_tty->print_cr("[%u] curr_region = "PTR_FORMAT" " 3021 gclog_or_tty->print_cr("[%u] curr_region = " PTR_FORMAT " "
3022 "["PTR_FORMAT", "PTR_FORMAT"), " 3022 "[" PTR_FORMAT ", " PTR_FORMAT "), "
3023 "limit = "PTR_FORMAT, 3023 "limit = " PTR_FORMAT,
3024 worker_id, p2i(curr_region), p2i(bottom), p2i(end), p2i(limit)); 3024 worker_id, p2i(curr_region), p2i(bottom), p2i(end), p2i(limit));
3025 } 3025 }
3026 3026
3027 // notice that _finger == end cannot be guaranteed here since, 3027 // notice that _finger == end cannot be guaranteed here since,
3028 // someone else might have moved the finger even further 3028 // someone else might have moved the finger even further
3033 PTR_FORMAT, worker_id, p2i(curr_region)); 3033 PTR_FORMAT, worker_id, p2i(curr_region));
3034 } 3034 }
3035 3035
3036 if (limit > bottom) { 3036 if (limit > bottom) {
3037 if (verbose_low()) { 3037 if (verbose_low()) {
3038 gclog_or_tty->print_cr("[%u] region "PTR_FORMAT" is not empty, " 3038 gclog_or_tty->print_cr("[%u] region " PTR_FORMAT " is not empty, "
3039 "returning it ", worker_id, p2i(curr_region)); 3039 "returning it ", worker_id, p2i(curr_region));
3040 } 3040 }
3041 return curr_region; 3041 return curr_region;
3042 } else { 3042 } else {
3043 assert(limit == bottom, 3043 assert(limit == bottom,
3044 "the region limit should be at bottom"); 3044 "the region limit should be at bottom");
3045 if (verbose_low()) { 3045 if (verbose_low()) {
3046 gclog_or_tty->print_cr("[%u] region "PTR_FORMAT" is empty, " 3046 gclog_or_tty->print_cr("[%u] region " PTR_FORMAT " is empty, "
3047 "returning NULL", worker_id, p2i(curr_region)); 3047 "returning NULL", worker_id, p2i(curr_region));
3048 } 3048 }
3049 // we return NULL and the caller should try calling 3049 // we return NULL and the caller should try calling
3050 // claim_region() again. 3050 // claim_region() again.
3051 return NULL; 3051 return NULL;
3053 } else { 3053 } else {
3054 assert(_finger > finger, "the finger should have moved forward"); 3054 assert(_finger > finger, "the finger should have moved forward");
3055 if (verbose_low()) { 3055 if (verbose_low()) {
3056 if (curr_region == NULL) { 3056 if (curr_region == NULL) {
3057 gclog_or_tty->print_cr("[%u] found uncommitted region, moving finger, " 3057 gclog_or_tty->print_cr("[%u] found uncommitted region, moving finger, "
3058 "global finger = "PTR_FORMAT", " 3058 "global finger = " PTR_FORMAT ", "
3059 "our finger = "PTR_FORMAT, 3059 "our finger = " PTR_FORMAT,
3060 worker_id, p2i(_finger), p2i(finger)); 3060 worker_id, p2i(_finger), p2i(finger));
3061 } else { 3061 } else {
3062 gclog_or_tty->print_cr("[%u] somebody else moved the finger, " 3062 gclog_or_tty->print_cr("[%u] somebody else moved the finger, "
3063 "global finger = "PTR_FORMAT", " 3063 "global finger = " PTR_FORMAT ", "
3064 "our finger = "PTR_FORMAT, 3064 "our finger = " PTR_FORMAT,
3065 worker_id, p2i(_finger), p2i(finger)); 3065 worker_id, p2i(_finger), p2i(finger));
3066 } 3066 }
3067 } 3067 }
3068 3068
3069 // read it again 3069 // read it again
3095 return NULL; 3095 return NULL;
3096 } 3096 }
3097 3097
3098 void do_object_work(oop obj) { 3098 void do_object_work(oop obj) {
3099 guarantee(!_g1h->obj_in_cs(obj), 3099 guarantee(!_g1h->obj_in_cs(obj),
3100 err_msg("obj: "PTR_FORMAT" in CSet, phase: %s, info: %d", 3100 err_msg("obj: " PTR_FORMAT " in CSet, phase: %s, info: %d",
3101 p2i((void*) obj), phase_str(), _info)); 3101 p2i((void*) obj), phase_str(), _info));
3102 } 3102 }
3103 3103
3104 public: 3104 public:
3105 VerifyNoCSetOopsClosure() : _g1h(G1CollectedHeap::heap()) { } 3105 VerifyNoCSetOopsClosure() : _g1h(G1CollectedHeap::heap()) { }
3156 // not hold any more. 3156 // not hold any more.
3157 // Since we always iterate over all regions, we might get a NULL HeapRegion 3157 // Since we always iterate over all regions, we might get a NULL HeapRegion
3158 // here. 3158 // here.
3159 HeapRegion* global_hr = _g1h->heap_region_containing_raw(global_finger); 3159 HeapRegion* global_hr = _g1h->heap_region_containing_raw(global_finger);
3160 guarantee(global_hr == NULL || global_finger == global_hr->bottom(), 3160 guarantee(global_hr == NULL || global_finger == global_hr->bottom(),
3161 err_msg("global finger: "PTR_FORMAT" region: "HR_FORMAT, 3161 err_msg("global finger: " PTR_FORMAT " region: " HR_FORMAT,
3162 p2i(global_finger), HR_FORMAT_PARAMS(global_hr))); 3162 p2i(global_finger), HR_FORMAT_PARAMS(global_hr)));
3163 } 3163 }
3164 3164
3165 // Verify the task fingers 3165 // Verify the task fingers
3166 assert(parallel_marking_threads() <= _max_worker_id, "sanity"); 3166 assert(parallel_marking_threads() <= _max_worker_id, "sanity");
3170 if (task_finger != NULL && task_finger < _heap_end) { 3170 if (task_finger != NULL && task_finger < _heap_end) {
3171 // See above note on the global finger verification. 3171 // See above note on the global finger verification.
3172 HeapRegion* task_hr = _g1h->heap_region_containing_raw(task_finger); 3172 HeapRegion* task_hr = _g1h->heap_region_containing_raw(task_finger);
3173 guarantee(task_hr == NULL || task_finger == task_hr->bottom() || 3173 guarantee(task_hr == NULL || task_finger == task_hr->bottom() ||
3174 !task_hr->in_collection_set(), 3174 !task_hr->in_collection_set(),
3175 err_msg("task finger: "PTR_FORMAT" region: "HR_FORMAT, 3175 err_msg("task finger: " PTR_FORMAT " region: " HR_FORMAT,
3176 p2i(task_finger), HR_FORMAT_PARAMS(task_hr))); 3176 p2i(task_finger), HR_FORMAT_PARAMS(task_hr)));
3177 } 3177 }
3178 } 3178 }
3179 } 3179 }
3180 #endif // PRODUCT 3180 #endif // PRODUCT
3212 HeapWord* limit = hr->next_top_at_mark_start(); 3212 HeapWord* limit = hr->next_top_at_mark_start();
3213 HeapWord* end = hr->end(); 3213 HeapWord* end = hr->end();
3214 3214
3215 assert(start <= limit && limit <= hr->top() && hr->top() <= hr->end(), 3215 assert(start <= limit && limit <= hr->top() && hr->top() <= hr->end(),
3216 err_msg("Preconditions not met - " 3216 err_msg("Preconditions not met - "
3217 "start: "PTR_FORMAT", limit: "PTR_FORMAT", " 3217 "start: " PTR_FORMAT ", limit: " PTR_FORMAT ", "
3218 "top: "PTR_FORMAT", end: "PTR_FORMAT, 3218 "top: " PTR_FORMAT ", end: " PTR_FORMAT,
3219 p2i(start), p2i(limit), p2i(hr->top()), p2i(hr->end()))); 3219 p2i(start), p2i(limit), p2i(hr->top()), p2i(hr->end())));
3220 3220
3221 assert(hr->next_marked_bytes() == 0, "Precondition"); 3221 assert(hr->next_marked_bytes() == 0, "Precondition");
3222 3222
3223 if (start == limit) { 3223 if (start == limit) {
3492 } 3492 }
3493 3493
3494 #ifndef PRODUCT 3494 #ifndef PRODUCT
3495 // for debugging purposes 3495 // for debugging purposes
3496 void ConcurrentMark::print_finger() { 3496 void ConcurrentMark::print_finger() {
3497 gclog_or_tty->print_cr("heap ["PTR_FORMAT", "PTR_FORMAT"), global finger = "PTR_FORMAT, 3497 gclog_or_tty->print_cr("heap [" PTR_FORMAT ", " PTR_FORMAT "), global finger = " PTR_FORMAT,
3498 p2i(_heap_start), p2i(_heap_end), p2i(_finger)); 3498 p2i(_heap_start), p2i(_heap_end), p2i(_finger));
3499 for (uint i = 0; i < _max_worker_id; ++i) { 3499 for (uint i = 0; i < _max_worker_id; ++i) {
3500 gclog_or_tty->print(" %u: " PTR_FORMAT, i, p2i(_tasks[i]->finger())); 3500 gclog_or_tty->print(" %u: " PTR_FORMAT, i, p2i(_tasks[i]->finger()));
3501 } 3501 }
3502 gclog_or_tty->cr(); 3502 gclog_or_tty->cr();
3577 "claim_region() should have filtered out NULL regions"); 3577 "claim_region() should have filtered out NULL regions");
3578 assert(!hr->continuesHumongous(), 3578 assert(!hr->continuesHumongous(),
3579 "claim_region() should have filtered out continues humongous regions"); 3579 "claim_region() should have filtered out continues humongous regions");
3580 3580
3581 if (_cm->verbose_low()) { 3581 if (_cm->verbose_low()) {
3582 gclog_or_tty->print_cr("[%u] setting up for region "PTR_FORMAT, 3582 gclog_or_tty->print_cr("[%u] setting up for region " PTR_FORMAT,
3583 _worker_id, p2i(hr)); 3583 _worker_id, p2i(hr));
3584 } 3584 }
3585 3585
3586 _curr_region = hr; 3586 _curr_region = hr;
3587 _finger = hr->bottom(); 3587 _finger = hr->bottom();
3594 HeapWord* limit = hr->next_top_at_mark_start(); 3594 HeapWord* limit = hr->next_top_at_mark_start();
3595 3595
3596 if (limit == bottom) { 3596 if (limit == bottom) {
3597 if (_cm->verbose_low()) { 3597 if (_cm->verbose_low()) {
3598 gclog_or_tty->print_cr("[%u] found an empty region " 3598 gclog_or_tty->print_cr("[%u] found an empty region "
3599 "["PTR_FORMAT", "PTR_FORMAT")", 3599 "[" PTR_FORMAT ", " PTR_FORMAT ")",
3600 _worker_id, p2i(bottom), p2i(limit)); 3600 _worker_id, p2i(bottom), p2i(limit));
3601 } 3601 }
3602 // The region was collected underneath our feet. 3602 // The region was collected underneath our feet.
3603 // We set the finger to bottom to ensure that the bitmap 3603 // We set the finger to bottom to ensure that the bitmap
3604 // iteration that will follow this will not do anything. 3604 // iteration that will follow this will not do anything.
3626 } 3626 }
3627 3627
3628 void CMTask::giveup_current_region() { 3628 void CMTask::giveup_current_region() {
3629 assert(_curr_region != NULL, "invariant"); 3629 assert(_curr_region != NULL, "invariant");
3630 if (_cm->verbose_low()) { 3630 if (_cm->verbose_low()) {
3631 gclog_or_tty->print_cr("[%u] giving up region "PTR_FORMAT, 3631 gclog_or_tty->print_cr("[%u] giving up region " PTR_FORMAT,
3632 _worker_id, p2i(_curr_region)); 3632 _worker_id, p2i(_curr_region));
3633 } 3633 }
3634 clear_region_fields(); 3634 clear_region_fields();
3635 } 3635 }
3636 3636
3748 _interval_start_time_ms = curr_time_ms; 3748 _interval_start_time_ms = curr_time_ms;
3749 _all_clock_intervals_ms.add(last_interval_ms); 3749 _all_clock_intervals_ms.add(last_interval_ms);
3750 3750
3751 if (_cm->verbose_medium()) { 3751 if (_cm->verbose_medium()) {
3752 gclog_or_tty->print_cr("[%u] regular clock, interval = %1.2lfms, " 3752 gclog_or_tty->print_cr("[%u] regular clock, interval = %1.2lfms, "
3753 "scanned = "SIZE_FORMAT"%s, refs reached = "SIZE_FORMAT"%s", 3753 "scanned = " SIZE_FORMAT "%s, refs reached = " SIZE_FORMAT "%s",
3754 _worker_id, last_interval_ms, 3754 _worker_id, last_interval_ms,
3755 _words_scanned, 3755 _words_scanned,
3756 (_words_scanned >= _words_scanned_limit) ? " (*)" : "", 3756 (_words_scanned >= _words_scanned_limit) ? " (*)" : "",
3757 _refs_reached, 3757 _refs_reached,
3758 (_refs_reached >= _refs_reached_limit) ? " (*)" : ""); 3758 (_refs_reached >= _refs_reached_limit) ? " (*)" : "");
3917 bool ret = _task_queue->pop_local(obj); 3917 bool ret = _task_queue->pop_local(obj);
3918 while (ret) { 3918 while (ret) {
3919 statsOnly( ++_local_pops ); 3919 statsOnly( ++_local_pops );
3920 3920
3921 if (_cm->verbose_high()) { 3921 if (_cm->verbose_high()) {
3922 gclog_or_tty->print_cr("[%u] popped "PTR_FORMAT, _worker_id, 3922 gclog_or_tty->print_cr("[%u] popped " PTR_FORMAT, _worker_id,
3923 p2i((void*) obj)); 3923 p2i((void*) obj));
3924 } 3924 }
3925 3925
3926 assert(_g1h->is_in_g1_reserved((HeapWord*) obj), "invariant" ); 3926 assert(_g1h->is_in_g1_reserved((HeapWord*) obj), "invariant" );
3927 assert(!_g1h->is_on_master_free_list( 3927 assert(!_g1h->is_on_master_free_list(
4270 // fresh region, _finger points to start(). 4270 // fresh region, _finger points to start().
4271 MemRegion mr = MemRegion(_finger, _region_limit); 4271 MemRegion mr = MemRegion(_finger, _region_limit);
4272 4272
4273 if (_cm->verbose_low()) { 4273 if (_cm->verbose_low()) {
4274 gclog_or_tty->print_cr("[%u] we're scanning part " 4274 gclog_or_tty->print_cr("[%u] we're scanning part "
4275 "["PTR_FORMAT", "PTR_FORMAT") " 4275 "[" PTR_FORMAT ", " PTR_FORMAT ") "
4276 "of region "HR_FORMAT, 4276 "of region " HR_FORMAT,
4277 _worker_id, p2i(_finger), p2i(_region_limit), 4277 _worker_id, p2i(_finger), p2i(_region_limit),
4278 HR_FORMAT_PARAMS(_curr_region)); 4278 HR_FORMAT_PARAMS(_curr_region));
4279 } 4279 }
4280 4280
4281 assert(!_curr_region->isHumongous() || mr.start() == _curr_region->bottom(), 4281 assert(!_curr_region->isHumongous() || mr.start() == _curr_region->bottom(),
4358 // Yes, we managed to claim one 4358 // Yes, we managed to claim one
4359 statsOnly( ++_regions_claimed ); 4359 statsOnly( ++_regions_claimed );
4360 4360
4361 if (_cm->verbose_low()) { 4361 if (_cm->verbose_low()) {
4362 gclog_or_tty->print_cr("[%u] we successfully claimed " 4362 gclog_or_tty->print_cr("[%u] we successfully claimed "
4363 "region "PTR_FORMAT, 4363 "region " PTR_FORMAT,
4364 _worker_id, p2i(claimed_region)); 4364 _worker_id, p2i(claimed_region));
4365 } 4365 }
4366 4366
4367 setup_for_region(claimed_region); 4367 setup_for_region(claimed_region);
4368 assert(_curr_region == claimed_region, "invariant"); 4368 assert(_curr_region == claimed_region, "invariant");
4419 oop obj; 4419 oop obj;
4420 statsOnly( ++_steal_attempts ); 4420 statsOnly( ++_steal_attempts );
4421 4421
4422 if (_cm->try_stealing(_worker_id, &_hash_seed, obj)) { 4422 if (_cm->try_stealing(_worker_id, &_hash_seed, obj)) {
4423 if (_cm->verbose_medium()) { 4423 if (_cm->verbose_medium()) {
4424 gclog_or_tty->print_cr("[%u] stolen "PTR_FORMAT" successfully", 4424 gclog_or_tty->print_cr("[%u] stolen " PTR_FORMAT " successfully",
4425 _worker_id, p2i((void*) obj)); 4425 _worker_id, p2i((void*) obj));
4426 } 4426 }
4427 4427
4428 statsOnly( ++_steals ); 4428 statsOnly( ++_steals );
4429 4429
4627 4627
4628 // All the output lines are prefixed with this string to be able to 4628 // All the output lines are prefixed with this string to be able to
4629 // identify them easily in a large log file. 4629 // identify them easily in a large log file.
4630 #define G1PPRL_LINE_PREFIX "###" 4630 #define G1PPRL_LINE_PREFIX "###"
4631 4631
4632 #define G1PPRL_ADDR_BASE_FORMAT " "PTR_FORMAT"-"PTR_FORMAT 4632 #define G1PPRL_ADDR_BASE_FORMAT " " PTR_FORMAT "-" PTR_FORMAT
4633 #ifdef _LP64 4633 #ifdef _LP64
4634 #define G1PPRL_ADDR_BASE_H_FORMAT " %37s" 4634 #define G1PPRL_ADDR_BASE_H_FORMAT " %37s"
4635 #else // _LP64 4635 #else // _LP64
4636 #define G1PPRL_ADDR_BASE_H_FORMAT " %21s" 4636 #define G1PPRL_ADDR_BASE_H_FORMAT " %21s"
4637 #endif // _LP64 4637 #endif // _LP64
4638 4638
4639 // For per-region info 4639 // For per-region info
4640 #define G1PPRL_TYPE_FORMAT " %-4s" 4640 #define G1PPRL_TYPE_FORMAT " %-4s"
4641 #define G1PPRL_TYPE_H_FORMAT " %4s" 4641 #define G1PPRL_TYPE_H_FORMAT " %4s"
4642 #define G1PPRL_BYTE_FORMAT " "SIZE_FORMAT_W(9) 4642 #define G1PPRL_BYTE_FORMAT " " SIZE_FORMAT_W(9)
4643 #define G1PPRL_BYTE_H_FORMAT " %9s" 4643 #define G1PPRL_BYTE_H_FORMAT " %9s"
4644 #define G1PPRL_DOUBLE_FORMAT " %14.1f" 4644 #define G1PPRL_DOUBLE_FORMAT " %14.1f"
4645 #define G1PPRL_DOUBLE_H_FORMAT " %14s" 4645 #define G1PPRL_DOUBLE_H_FORMAT " %14s"
4646 4646
4647 // For summary info 4647 // For summary info
4648 #define G1PPRL_SUM_ADDR_FORMAT(tag) " "tag":"G1PPRL_ADDR_BASE_FORMAT 4648 #define G1PPRL_SUM_ADDR_FORMAT(tag) " " tag ":" G1PPRL_ADDR_BASE_FORMAT
4649 #define G1PPRL_SUM_BYTE_FORMAT(tag) " "tag": "SIZE_FORMAT 4649 #define G1PPRL_SUM_BYTE_FORMAT(tag) " " tag ": " SIZE_FORMAT
4650 #define G1PPRL_SUM_MB_FORMAT(tag) " "tag": %1.2f MB" 4650 #define G1PPRL_SUM_MB_FORMAT(tag) " " tag ": %1.2f MB"
4651 #define G1PPRL_SUM_MB_PERC_FORMAT(tag) G1PPRL_SUM_MB_FORMAT(tag)" / %1.2f %%" 4651 #define G1PPRL_SUM_MB_PERC_FORMAT(tag) G1PPRL_SUM_MB_FORMAT(tag) " / %1.2f %%"
4652 4652
4653 G1PrintRegionLivenessInfoClosure:: 4653 G1PrintRegionLivenessInfoClosure::
4654 G1PrintRegionLivenessInfoClosure(outputStream* out, const char* phase_name) 4654 G1PrintRegionLivenessInfoClosure(outputStream* out, const char* phase_name)
4655 : _out(out), 4655 : _out(out),
4656 _total_used_bytes(0), _total_capacity_bytes(0), 4656 _total_used_bytes(0), _total_capacity_bytes(0),

mercurial