< prev index next >
src/share/vm/gc_implementation/shenandoah/shenandoahHeuristics.hpp
Print this page
rev 10533 : [backport] Replace risky SBS::need_update_refs_barrier with straightforward check
rev 10584 : [backport] Move periodic GC decision making to GC heuristics base class
rev 10606 : [backport] Adaptive/Traversal heuristics rewrite for allocation rate
rev 10607 : [backport] Remove ShHeuristics::print_threshold
rev 10637 : [backport] Purge partial heuristics and connection matrix infrastructure
@@ -51,52 +51,49 @@
log_info(gc)("Heuristics ergonomically sets -XX:" #name "=" #value); \
FLAG_SET_DEFAULT(name, value); \
} \
} while (0)
-
class ShenandoahCollectionSet;
class ShenandoahHeapRegion;
class ShenandoahHeuristics : public CHeapObj<mtGC> {
+ static const intx Concurrent_Adjust = 1; // recover from penalties
+ static const intx Degenerated_Penalty = 10; // how much to penalize average GC duration history on Degenerated GC
+ static const intx Full_Penalty = 20; // how much to penalize average GC duration history on Full GC
+
protected:
typedef struct {
ShenandoahHeapRegion* _region;
size_t _garbage;
uint64_t _seqnum_last_alloc;
} RegionData;
- typedef struct {
- ShenandoahHeapRegion* _region;
- size_t _connections;
- } RegionConnections;
-
bool _update_refs_early;
bool _update_refs_adaptive;
RegionData* _region_data;
size_t _region_data_size;
- RegionConnections* _region_connects;
- size_t _region_connects_size;
-
uint _degenerated_cycles_in_a_row;
uint _successful_cycles_in_a_row;
size_t _bytes_in_cset;
+ double _cycle_start;
double _last_cycle_end;
+ size_t _gc_times_learned;
+ size_t _gc_time_penalties;
+ TruncatedSeq* _gc_time_history;
+
static int compare_by_garbage(RegionData a, RegionData b);
static int compare_by_alloc_seq_ascending(RegionData a, RegionData b);
static int compare_by_alloc_seq_descending(RegionData a, RegionData b);
- static int compare_by_connects(RegionConnections a, RegionConnections b);
RegionData* get_region_data_cache(size_t num);
- RegionConnections* get_region_connects_cache(size_t num);
-
virtual void choose_collection_set_from_regiondata(ShenandoahCollectionSet* set,
RegionData* data, size_t data_size,
size_t free) = 0;
public:
@@ -112,18 +109,14 @@
virtual void record_cycle_end();
virtual void record_phase_time(ShenandoahPhaseTimings::Phase phase, double secs);
- virtual void print_thresholds();
-
- virtual bool should_start_normal_gc() const = 0;
+ virtual bool should_start_normal_gc() const;
virtual bool should_start_update_refs();
- virtual bool update_refs() const;
-
virtual bool should_degenerate_cycle();
virtual void record_success_concurrent();
virtual void record_success_degenerated();
@@ -132,12 +125,10 @@
virtual void record_allocation_failure_gc();
virtual void record_explicit_gc();
- virtual void record_peak_occupancy();
-
virtual void start_choose_collection_set() {
}
virtual void end_choose_collection_set() {
}
< prev index next >