< prev index next >
src/share/vm/gc_implementation/shenandoah/shenandoahHeap.hpp
Print this page
rev 11461 : [backport] 8226757: Shenandoah: Make traversal and passive modes explicit
rev 11463 : Backport Traversal GC
@@ -47,10 +47,11 @@
class ShenandoahHeuristics;
class ShenandoahMarkingContext;
class ShenandoahMode;
class ShenandoahPhaseTimings;
class ShenandoahPacer;
+class ShenandoahTraversalGC;
class ShenandoahVerifier;
class ShenandoahWorkGang;
class VMStructs;
class ShenandoahRegionIterator : public StackObj {
@@ -233,19 +234,23 @@
// Heap is under evacuation: needs WB barriers. (Set together with UNSTABLE)
EVACUATION_BITPOS = 2,
// Heap is under updating: needs SVRB/SVWB barriers.
- UPDATEREFS_BITPOS = 3
+ UPDATEREFS_BITPOS = 3,
+
+ // Heap is under traversal collection
+ TRAVERSAL_BITPOS = 4
};
enum GCState {
STABLE = 0,
HAS_FORWARDED = 1 << HAS_FORWARDED_BITPOS,
MARKING = 1 << MARKING_BITPOS,
EVACUATION = 1 << EVACUATION_BITPOS,
- UPDATEREFS = 1 << UPDATEREFS_BITPOS
+ UPDATEREFS = 1 << UPDATEREFS_BITPOS,
+ TRAVERSAL = 1 << TRAVERSAL_BITPOS
};
private:
ShenandoahSharedBitmap _gc_state;
ShenandoahSharedFlag _degenerated_gc_in_progress;
@@ -263,30 +268,33 @@
void set_evacuation_in_progress(bool in_progress);
void set_update_refs_in_progress(bool in_progress);
void set_degenerated_gc_in_progress(bool in_progress);
void set_full_gc_in_progress(bool in_progress);
void set_full_gc_move_in_progress(bool in_progress);
+ void set_concurrent_traversal_in_progress(bool in_progress);
void set_has_forwarded_objects(bool cond);
inline bool is_stable() const;
inline bool is_idle() const;
inline bool is_concurrent_mark_in_progress() const;
inline bool is_update_refs_in_progress() const;
inline bool is_evacuation_in_progress() const;
inline bool is_degenerated_gc_in_progress() const;
inline bool is_full_gc_in_progress() const;
inline bool is_full_gc_move_in_progress() const;
+ inline bool is_concurrent_traversal_in_progress() const;
inline bool has_forwarded_objects() const;
inline bool is_gc_in_progress_mask(uint mask) const;
// ---------- GC cancellation and degeneration machinery
//
// Cancelled GC flag is used to notify concurrent phases that they should terminate.
//
public:
enum ShenandoahDegenPoint {
_degenerated_unset,
+ _degenerated_traversal,
_degenerated_outside_cycle,
_degenerated_mark,
_degenerated_evac,
_degenerated_updaterefs,
_DEGENERATED_LIMIT
@@ -294,10 +302,12 @@
static const char* degen_point_to_string(ShenandoahDegenPoint point) {
switch (point) {
case _degenerated_unset:
return "<UNSET>";
+ case _degenerated_traversal:
+ return "Traversal";
case _degenerated_outside_cycle:
return "Outside of Cycle";
case _degenerated_mark:
return "Mark";
case _degenerated_evac:
@@ -331,20 +341,24 @@
void vmop_entry_init_mark();
void vmop_entry_final_mark();
void vmop_entry_final_evac();
void vmop_entry_init_updaterefs();
void vmop_entry_final_updaterefs();
+ void vmop_entry_init_traversal();
+ void vmop_entry_final_traversal();
void vmop_entry_full(GCCause::Cause cause);
void vmop_degenerated(ShenandoahDegenPoint point);
// Entry methods to normally STW GC operations. These set up logging, monitoring
// and workers for net VM operation
void entry_init_mark();
void entry_final_mark();
void entry_final_evac();
void entry_init_updaterefs();
void entry_final_updaterefs();
+ void entry_init_traversal();
+ void entry_final_traversal();
void entry_full(GCCause::Cause cause);
void entry_degenerated(int point);
// Entry methods to normally concurrent GC operations. These set up logging, monitoring
// for concurrent operation.
@@ -352,19 +366,22 @@
void entry_mark();
void entry_preclean();
void entry_cleanup();
void entry_evac();
void entry_updaterefs();
+ void entry_traversal();
void entry_uncommit(double shrink_before);
private:
// Actual work for the phases
void op_init_mark();
void op_final_mark();
void op_final_evac();
void op_init_updaterefs();
void op_final_updaterefs();
+ void op_init_traversal();
+ void op_final_traversal();
void op_full(GCCause::Cause cause);
void op_degenerated(ShenandoahDegenPoint point);
void op_degenerated_fail();
void op_degenerated_futile();
@@ -373,10 +390,11 @@
void op_preclean();
void op_cleanup();
void op_conc_evac();
void op_stw_evac();
void op_updaterefs();
+ void op_traversal();
void op_uncommit(double shrink_before);
// Messages for GC trace event, they have to be immortal for
// passing around the logging/tracing systems
const char* init_mark_event_message() const;
@@ -391,10 +409,11 @@
ShenandoahCollectorPolicy* _shenandoah_policy;
ShenandoahMode* _gc_mode;
ShenandoahHeuristics* _heuristics;
ShenandoahFreeSet* _free_set;
ShenandoahConcurrentMark* _scm;
+ ShenandoahTraversalGC* _traversal_gc;
ShenandoahMarkCompact* _full_gc;
ShenandoahPacer* _pacer;
ShenandoahVerifier* _verifier;
ShenandoahAllocTracker* _alloc_tracker;
@@ -406,10 +425,12 @@
public:
ShenandoahCollectorPolicy* shenandoah_policy() const { return _shenandoah_policy; }
ShenandoahHeuristics* heuristics() const { return _heuristics; }
ShenandoahFreeSet* free_set() const { return _free_set; }
ShenandoahConcurrentMark* concurrent_mark() { return _scm; }
+ ShenandoahTraversalGC* traversal_gc() const { return _traversal_gc; }
+ bool is_traversal_mode() const { return _traversal_gc != NULL; }
ShenandoahPacer* pacer() const { return _pacer; }
ShenandoahPhaseTimings* phase_timings() const { return _phase_timings; }
ShenandoahAllocTracker* alloc_tracker() const { return _alloc_tracker; }
@@ -635,10 +656,13 @@
// ---------- Helper functions
//
public:
template <class T>
+ inline oop evac_update_with_forwarded(T* p);
+
+ template <class T>
inline oop maybe_update_with_forwarded(T* p);
template <class T>
inline oop maybe_update_with_forwarded_not_null(T* p, oop obj);
< prev index next >