515 young_gen()->object_iterate(cl); 516 old_gen()->object_iterate(cl); 517 } 518 519 520 HeapWord* ParallelScavengeHeap::block_start(const void* addr) const { 521 if (young_gen()->is_in_reserved(addr)) { 522 assert(young_gen()->is_in(addr), 523 "addr should be in allocated part of young gen"); 524 // called from os::print_location by find or VMError 525 if (Debugging || VMError::fatal_error_in_progress()) return NULL; 526 Unimplemented(); 527 } else if (old_gen()->is_in_reserved(addr)) { 528 assert(old_gen()->is_in(addr), 529 "addr should be in allocated part of old gen"); 530 return old_gen()->start_array()->object_start((HeapWord*)addr); 531 } 532 return 0; 533 } 534 535 size_t ParallelScavengeHeap::block_size(const HeapWord* addr) const { 536 return oop(addr)->size(); 537 } 538 539 bool ParallelScavengeHeap::block_is_obj(const HeapWord* addr) const { 540 return block_start(addr) == addr; 541 } 542 543 jlong ParallelScavengeHeap::millis_since_last_gc() { 544 return UseParallelOldGC ? 545 PSParallelCompact::millis_since_last_gc() : 546 PSMarkSweepProxy::millis_since_last_gc(); 547 } 548 549 void ParallelScavengeHeap::prepare_for_verify() { 550 ensure_parsability(false); // no need to retire TLABs for verification 551 } 552 553 PSHeapSummary ParallelScavengeHeap::create_ps_heap_summary() { 554 PSOldGen* old = old_gen(); 555 HeapWord* old_committed_end = (HeapWord*)old->virtual_space()->committed_high_addr(); 556 VirtualSpaceSummary old_summary(old->reserved().start(), old_committed_end, old->reserved().end()); 557 SpaceSummary old_space(old->reserved().start(), old_committed_end, old->used_in_bytes()); 558 | 515 young_gen()->object_iterate(cl); 516 old_gen()->object_iterate(cl); 517 } 518 519 520 HeapWord* ParallelScavengeHeap::block_start(const void* addr) const { 521 if (young_gen()->is_in_reserved(addr)) { 522 assert(young_gen()->is_in(addr), 523 "addr should be in allocated part of young gen"); 524 // called from os::print_location by find or VMError 525 if (Debugging || VMError::fatal_error_in_progress()) return NULL; 526 Unimplemented(); 527 } else if (old_gen()->is_in_reserved(addr)) { 528 assert(old_gen()->is_in(addr), 529 "addr should be in allocated part of old gen"); 530 return old_gen()->start_array()->object_start((HeapWord*)addr); 531 } 532 return 0; 533 } 534 535 bool ParallelScavengeHeap::block_is_obj(const HeapWord* addr) const { 536 return block_start(addr) == addr; 537 } 538 539 jlong ParallelScavengeHeap::millis_since_last_gc() { 540 return UseParallelOldGC ? 541 PSParallelCompact::millis_since_last_gc() : 542 PSMarkSweepProxy::millis_since_last_gc(); 543 } 544 545 void ParallelScavengeHeap::prepare_for_verify() { 546 ensure_parsability(false); // no need to retire TLABs for verification 547 } 548 549 PSHeapSummary ParallelScavengeHeap::create_ps_heap_summary() { 550 PSOldGen* old = old_gen(); 551 HeapWord* old_committed_end = (HeapWord*)old->virtual_space()->committed_high_addr(); 552 VirtualSpaceSummary old_summary(old->reserved().start(), old_committed_end, old->reserved().end()); 553 SpaceSummary old_space(old->reserved().start(), old_committed_end, old->used_in_bytes()); 554 |