comparison src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp @ 696:f18338cf04b0

6810474: par compact - crash in summary_phase with very full heap Reviewed-by: tonyp
author jcoomes
date Tue, 03 Mar 2009 14:23:18 -0800
parents 7bb995fbd3c0
children 8b46c4d82093 148e5441d916
comparison
equal deleted inserted replaced
695:becb17ad5e51 696:f18338cf04b0
506 HeapWord** target_next) 506 HeapWord** target_next)
507 { 507 {
508 assert(destination <= target_end, "sanity"); 508 assert(destination <= target_end, "sanity");
509 assert(destination + _region_data[src_region].data_size() > target_end, 509 assert(destination + _region_data[src_region].data_size() > target_end,
510 "region should not fit into target space"); 510 "region should not fit into target space");
511 assert(is_region_aligned(target_end), "sanity");
511 512
512 size_t split_region = src_region; 513 size_t split_region = src_region;
513 HeapWord* split_destination = destination; 514 HeapWord* split_destination = destination;
514 size_t partial_obj_size = _region_data[src_region].partial_obj_size(); 515 size_t partial_obj_size = _region_data[src_region].partial_obj_size();
515 516
536 // address that was written during the summary phase, which would be 537 // address that was written during the summary phase, which would be
537 // 538 //
538 // max(top, max(new_top, clear_top)) 539 // max(top, max(new_top, clear_top))
539 // 540 //
540 // where clear_top is a new field in SpaceInfo. Would have to set clear_top 541 // where clear_top is a new field in SpaceInfo. Would have to set clear_top
541 // to destination + partial_obj_size, where both have the values passed to 542 // to target_end.
542 // this routine.
543 const RegionData* const sr = region(split_region); 543 const RegionData* const sr = region(split_region);
544 const size_t beg_idx = 544 const size_t beg_idx =
545 addr_to_region_idx(region_align_up(sr->destination() + 545 addr_to_region_idx(region_align_up(sr->destination() +
546 sr->partial_obj_size())); 546 sr->partial_obj_size()));
547 const size_t end_idx = 547 const size_t end_idx = addr_to_region_idx(target_end);
548 addr_to_region_idx(region_align_up(destination + partial_obj_size));
549 548
550 if (TraceParallelOldGCSummaryPhase) { 549 if (TraceParallelOldGCSummaryPhase) {
551 gclog_or_tty->print_cr("split: clearing source_region field in [" 550 gclog_or_tty->print_cr("split: clearing source_region field in ["
552 SIZE_FORMAT ", " SIZE_FORMAT ")", 551 SIZE_FORMAT ", " SIZE_FORMAT ")",
553 beg_idx, end_idx); 552 beg_idx, end_idx);