hotspot/src/share/vm/gc/g1/concurrentMark.cpp
changeset 35065 b4ff0249c092
parent 35061 be6025ebffea
child 35204 78a0fd90a70f
equal deleted inserted replaced
35063:cb24277be2e7 35065:b4ff0249c092
  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     }