< prev index next >

src/hotspot/share/gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.cpp

Print this page
rev 55538 : 8226757: Shenandoah: Make Traversal a separate mode


  48 
  49   // Final configuration checks
  50   SHENANDOAH_CHECK_FLAG_SET(ShenandoahLoadRefBarrier);
  51   SHENANDOAH_CHECK_FLAG_SET(ShenandoahSATBBarrier);
  52   SHENANDOAH_CHECK_FLAG_SET(ShenandoahKeepAliveBarrier);
  53   SHENANDOAH_CHECK_FLAG_SET(ShenandoahCASBarrier);
  54   SHENANDOAH_CHECK_FLAG_SET(ShenandoahCloneBarrier);
  55 }
  56 
  57 void ShenandoahAggressiveHeuristics::choose_collection_set_from_regiondata(ShenandoahCollectionSet* cset,
  58                                                                            RegionData* data, size_t size,
  59                                                                            size_t free) {
  60   for (size_t idx = 0; idx < size; idx++) {
  61     ShenandoahHeapRegion* r = data[idx]._region;
  62     if (r->garbage() > 0) {
  63       cset->add_region(r);
  64     }
  65   }
  66 }
  67 
  68 bool ShenandoahAggressiveHeuristics::should_start_normal_gc() const {
  69   log_info(gc)("Trigger: Start next cycle immediately");
  70   return true;
  71 }
  72 
  73 bool ShenandoahAggressiveHeuristics::should_process_references() {
  74   if (!can_process_references()) return false;
  75   // Randomly process refs with 50% chance.
  76   return (os::random() & 1) == 1;
  77 }
  78 
  79 bool ShenandoahAggressiveHeuristics::should_unload_classes() {
  80   if (!can_unload_classes_normal()) return false;
  81   if (has_metaspace_oom()) return true;
  82   // Randomly unload classes with 50% chance.
  83   return (os::random() & 1) == 1;
  84 }
  85 
  86 const char* ShenandoahAggressiveHeuristics::name() {
  87   return "aggressive";
  88 }


  48 
  49   // Final configuration checks
  50   SHENANDOAH_CHECK_FLAG_SET(ShenandoahLoadRefBarrier);
  51   SHENANDOAH_CHECK_FLAG_SET(ShenandoahSATBBarrier);
  52   SHENANDOAH_CHECK_FLAG_SET(ShenandoahKeepAliveBarrier);
  53   SHENANDOAH_CHECK_FLAG_SET(ShenandoahCASBarrier);
  54   SHENANDOAH_CHECK_FLAG_SET(ShenandoahCloneBarrier);
  55 }
  56 
  57 void ShenandoahAggressiveHeuristics::choose_collection_set_from_regiondata(ShenandoahCollectionSet* cset,
  58                                                                            RegionData* data, size_t size,
  59                                                                            size_t free) {
  60   for (size_t idx = 0; idx < size; idx++) {
  61     ShenandoahHeapRegion* r = data[idx]._region;
  62     if (r->garbage() > 0) {
  63       cset->add_region(r);
  64     }
  65   }
  66 }
  67 
  68 bool ShenandoahAggressiveHeuristics::should_start_gc() const {
  69   log_info(gc)("Trigger: Start next cycle immediately");
  70   return true;
  71 }
  72 
  73 bool ShenandoahAggressiveHeuristics::should_process_references() {
  74   if (!can_process_references()) return false;
  75   // Randomly process refs with 50% chance.
  76   return (os::random() & 1) == 1;
  77 }
  78 
  79 bool ShenandoahAggressiveHeuristics::should_unload_classes() {
  80   if (!can_unload_classes_normal()) return false;
  81   if (has_metaspace_oom()) return true;
  82   // Randomly unload classes with 50% chance.
  83   return (os::random() & 1) == 1;
  84 }
  85 
  86 const char* ShenandoahAggressiveHeuristics::name() {
  87   return "aggressive";
  88 }
< prev index next >