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 }
|