Mercurial > hg > graal-compiler
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); |