comparison src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp @ 496:b27c885f75f9

6786188: par compact - "SplitALot" stress mode should fill to_space Reviewed-by: jmasa, tonyp
author jcoomes
date Thu, 18 Dec 2008 10:54:01 -0800
parents 234c22e54b98
children 05c6d52fa7a9
comparison
equal deleted inserted replaced
495:234c22e54b98 496:b27c885f75f9
1471 _space_info[id].new_top_addr()); 1471 _space_info[id].new_top_addr());
1472 assert(result, "should not fail: bad filler object size"); 1472 assert(result, "should not fail: bad filler object size");
1473 } 1473 }
1474 1474
1475 void 1475 void
1476 PSParallelCompact::provoke_split_fill_survivor(SpaceId id)
1477 {
1478 if (total_invocations() % (ParallelOldGCSplitInterval * 3) != 0) {
1479 return;
1480 }
1481
1482 MutableSpace* const space = _space_info[id].space();
1483 if (space->is_empty()) {
1484 HeapWord* b = space->bottom();
1485 HeapWord* t = b + space->capacity_in_words() / 2;
1486 space->set_top(t);
1487 if (ZapUnusedHeapArea) {
1488 space->set_top_for_allocations();
1489 }
1490
1491 size_t obj_len = 8;
1492 while (b + obj_len <= t) {
1493 CollectedHeap::fill_with_object(b, obj_len);
1494 mark_bitmap()->mark_obj(b, obj_len);
1495 summary_data().add_obj(b, obj_len);
1496 b += obj_len;
1497 obj_len = (obj_len & 0x18) + 8; // 8 16 24 32 8 16 24 32 ...
1498 }
1499 if (b < t) {
1500 // The loop didn't completely fill to t (top); adjust top downward.
1501 space->set_top(b);
1502 if (ZapUnusedHeapArea) {
1503 space->set_top_for_allocations();
1504 }
1505 }
1506
1507 HeapWord** nta = _space_info[id].new_top_addr();
1508 bool result = summary_data().summarize(_space_info[id].split_info(),
1509 space->bottom(), space->top(), NULL,
1510 space->bottom(), space->end(), nta);
1511 assert(result, "space must fit into itself");
1512 }
1513 }
1514
1515 void
1476 PSParallelCompact::provoke_split(bool & max_compaction) 1516 PSParallelCompact::provoke_split(bool & max_compaction)
1477 { 1517 {
1518 if (total_invocations() % ParallelOldGCSplitInterval != 0) {
1519 return;
1520 }
1521
1478 const size_t region_size = ParallelCompactData::RegionSize; 1522 const size_t region_size = ParallelCompactData::RegionSize;
1479 ParallelCompactData& sd = summary_data(); 1523 ParallelCompactData& sd = summary_data();
1480 1524
1481 MutableSpace* const eden_space = _space_info[eden_space_id].space(); 1525 MutableSpace* const eden_space = _space_info[eden_space_id].space();
1482 MutableSpace* const from_space = _space_info[from_space_id].space(); 1526 MutableSpace* const from_space = _space_info[from_space_id].space();
1585 space->bottom(), space->top(), NULL, 1629 space->bottom(), space->top(), NULL,
1586 space->bottom(), space->end(), nta); 1630 space->bottom(), space->end(), nta);
1587 assert(result, "space must fit into itself"); 1631 assert(result, "space must fit into itself");
1588 _space_info[i].set_dense_prefix(space->bottom()); 1632 _space_info[i].set_dense_prefix(space->bottom());
1589 } 1633 }
1634
1635 #ifndef PRODUCT
1636 if (ParallelOldGCSplitALot) {
1637 provoke_split_fill_survivor(to_space_id);
1638 }
1639 #endif // #ifndef PRODUCT
1590 } 1640 }
1591 1641
1592 void PSParallelCompact::fill_dense_prefix_end(SpaceId id) 1642 void PSParallelCompact::fill_dense_prefix_end(SpaceId id)
1593 { 1643 {
1594 HeapWord* const dense_prefix_end = dense_prefix(id); 1644 HeapWord* const dense_prefix_end = dense_prefix(id);
1792 // XXX - should also try to expand 1842 // XXX - should also try to expand
1793 maximum_compaction = true; 1843 maximum_compaction = true;
1794 } 1844 }
1795 #ifndef PRODUCT 1845 #ifndef PRODUCT
1796 if (ParallelOldGCSplitALot && old_space_total_live < old_capacity) { 1846 if (ParallelOldGCSplitALot && old_space_total_live < old_capacity) {
1797 if (total_invocations() % ParallelOldGCSplitInterval == 0) { 1847 provoke_split(maximum_compaction);
1798 provoke_split(maximum_compaction);
1799 }
1800 } 1848 }
1801 #endif // #ifndef PRODUCT 1849 #endif // #ifndef PRODUCT
1802 1850
1803 // Permanent and Old generations. 1851 // Permanent and Old generations.
1804 summarize_space(perm_space_id, maximum_compaction); 1852 summarize_space(perm_space_id, maximum_compaction);