1481 |
1481 |
1482 class G1NoteEndOfConcMarkClosure : public HeapRegionClosure { |
1482 class G1NoteEndOfConcMarkClosure : public HeapRegionClosure { |
1483 G1CollectedHeap* _g1; |
1483 G1CollectedHeap* _g1; |
1484 size_t _freed_bytes; |
1484 size_t _freed_bytes; |
1485 FreeRegionList* _local_cleanup_list; |
1485 FreeRegionList* _local_cleanup_list; |
1486 HeapRegionSetCount _old_regions_removed; |
1486 uint _old_regions_removed; |
1487 HeapRegionSetCount _humongous_regions_removed; |
1487 uint _humongous_regions_removed; |
1488 HRRSCleanupTask* _hrrs_cleanup_task; |
1488 HRRSCleanupTask* _hrrs_cleanup_task; |
1489 |
1489 |
1490 public: |
1490 public: |
1491 G1NoteEndOfConcMarkClosure(G1CollectedHeap* g1, |
1491 G1NoteEndOfConcMarkClosure(G1CollectedHeap* g1, |
1492 FreeRegionList* local_cleanup_list, |
1492 FreeRegionList* local_cleanup_list, |
1493 HRRSCleanupTask* hrrs_cleanup_task) : |
1493 HRRSCleanupTask* hrrs_cleanup_task) : |
1494 _g1(g1), |
1494 _g1(g1), |
1495 _freed_bytes(0), |
1495 _freed_bytes(0), |
1496 _local_cleanup_list(local_cleanup_list), |
1496 _local_cleanup_list(local_cleanup_list), |
1497 _old_regions_removed(), |
1497 _old_regions_removed(0), |
1498 _humongous_regions_removed(), |
1498 _humongous_regions_removed(0), |
1499 _hrrs_cleanup_task(hrrs_cleanup_task) { } |
1499 _hrrs_cleanup_task(hrrs_cleanup_task) { } |
1500 |
1500 |
1501 size_t freed_bytes() { return _freed_bytes; } |
1501 size_t freed_bytes() { return _freed_bytes; } |
1502 const HeapRegionSetCount& old_regions_removed() { return _old_regions_removed; } |
1502 const uint old_regions_removed() { return _old_regions_removed; } |
1503 const HeapRegionSetCount& humongous_regions_removed() { return _humongous_regions_removed; } |
1503 const uint humongous_regions_removed() { return _humongous_regions_removed; } |
1504 |
1504 |
1505 bool doHeapRegion(HeapRegion *hr) { |
1505 bool doHeapRegion(HeapRegion *hr) { |
1506 if (hr->is_archive()) { |
1506 if (hr->is_archive()) { |
1507 return false; |
1507 return false; |
1508 } |
1508 } |
1513 |
1513 |
1514 if (hr->used() > 0 && hr->max_live_bytes() == 0 && !hr->is_young()) { |
1514 if (hr->used() > 0 && hr->max_live_bytes() == 0 && !hr->is_young()) { |
1515 _freed_bytes += hr->used(); |
1515 _freed_bytes += hr->used(); |
1516 hr->set_containing_set(NULL); |
1516 hr->set_containing_set(NULL); |
1517 if (hr->is_humongous()) { |
1517 if (hr->is_humongous()) { |
1518 _humongous_regions_removed.increment(1u, hr->capacity()); |
1518 _humongous_regions_removed++; |
1519 _g1->free_humongous_region(hr, _local_cleanup_list, true); |
1519 _g1->free_humongous_region(hr, _local_cleanup_list, true); |
1520 } else { |
1520 } else { |
1521 _old_regions_removed.increment(1u, hr->capacity()); |
1521 _old_regions_removed++; |
1522 _g1->free_region(hr, _local_cleanup_list, true); |
1522 _g1->free_region(hr, _local_cleanup_list, true); |
1523 } |
1523 } |
1524 } else { |
1524 } else { |
1525 hr->rem_set()->do_cleanup_work(_hrrs_cleanup_task); |
1525 hr->rem_set()->do_cleanup_work(_hrrs_cleanup_task); |
1526 } |
1526 } |