< prev index next >
src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp
Print this page
rev 50076 : Fold Partial GC into Traversal GC
*** 36,55 ****
class ConcurrentGCTimer;
class ShenandoahAsserts;
class ShenandoahAllocTracker;
class ShenandoahCollectorPolicy;
class ShenandoahConnectionMatrix;
class ShenandoahPhaseTimings;
class ShenandoahHeap;
class ShenandoahHeapRegion;
class ShenandoahHeapRegionClosure;
class ShenandoahHeapRegionSet;
class ShenandoahCollectionSet;
class ShenandoahFreeSet;
class ShenandoahConcurrentMark;
class ShenandoahMarkCompact;
- class ShenandoahPartialGC;
class ShenandoahPacer;
class ShenandoahTraversalGC;
class ShenandoahVerifier;
class ShenandoahConcurrentThread;
class ShenandoahMonitoringSupport;
--- 36,55 ----
class ConcurrentGCTimer;
class ShenandoahAsserts;
class ShenandoahAllocTracker;
class ShenandoahCollectorPolicy;
class ShenandoahConnectionMatrix;
+ class ShenandoahFastRegionSet;
class ShenandoahPhaseTimings;
class ShenandoahHeap;
class ShenandoahHeapRegion;
class ShenandoahHeapRegionClosure;
class ShenandoahHeapRegionSet;
class ShenandoahCollectionSet;
class ShenandoahFreeSet;
class ShenandoahConcurrentMark;
class ShenandoahMarkCompact;
class ShenandoahPacer;
class ShenandoahTraversalGC;
class ShenandoahVerifier;
class ShenandoahConcurrentThread;
class ShenandoahMonitoringSupport;
*** 177,220 ****
EVACUATION_BITPOS = 2,
// Heap is under updating: needs SVRB/SVWB barriers.
UPDATEREFS_BITPOS = 3,
- // Heap is under partial collection
- PARTIAL_BITPOS = 4,
-
// Heap is under traversal collection
! TRAVERSAL_BITPOS = 5,
};
enum GCState {
STABLE = 0,
HAS_FORWARDED = 1 << HAS_FORWARDED_BITPOS,
MARKING = 1 << MARKING_BITPOS,
EVACUATION = 1 << EVACUATION_BITPOS,
UPDATEREFS = 1 << UPDATEREFS_BITPOS,
- PARTIAL = 1 << PARTIAL_BITPOS,
TRAVERSAL = 1 << TRAVERSAL_BITPOS,
};
enum ShenandoahDegenPoint {
_degenerated_unset,
- _degenerated_partial,
_degenerated_traversal,
_degenerated_outside_cycle,
_degenerated_mark,
_degenerated_evac,
_degenerated_updaterefs,
_DEGENERATED_LIMIT,
};
static const char* degen_point_to_string(ShenandoahDegenPoint point) {
switch (point) {
case _degenerated_unset:
return "<UNSET>";
- case _degenerated_partial:
- return "Partial";
case _degenerated_traversal:
return "Traversal";
case _degenerated_outside_cycle:
return "Outside of Cycle";
case _degenerated_mark:
--- 177,219 ----
EVACUATION_BITPOS = 2,
// Heap is under updating: needs SVRB/SVWB barriers.
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,
TRAVERSAL = 1 << TRAVERSAL_BITPOS,
};
enum ShenandoahDegenPoint {
_degenerated_unset,
_degenerated_traversal,
_degenerated_outside_cycle,
_degenerated_mark,
_degenerated_evac,
_degenerated_updaterefs,
_DEGENERATED_LIMIT,
};
+ enum GCCycleMode {
+ NONE,
+ MINOR,
+ MAJOR
+ };
+
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:
*** 248,258 ****
ShenandoahRegionIterator _update_refs_iterator;
ShenandoahConcurrentMark* _scm;
ShenandoahMarkCompact* _full_gc;
- ShenandoahPartialGC* _partial_gc;
ShenandoahTraversalGC* _traversal_gc;
ShenandoahVerifier* _verifier;
ShenandoahPacer* _pacer;
ShenandoahConcurrentThread* _concurrent_gc_thread;
--- 247,256 ----
*** 312,321 ****
--- 310,321 ----
MemoryPool* _memory_pool;
ShenandoahEvacOOMHandler _oom_evac_handler;
+ ShenandoahSharedEnumFlag<GCCycleMode> _gc_cycle_mode;
+
#ifdef ASSERT
int _heap_expansion_count;
#endif
public:
*** 402,412 ****
inline ShenandoahHeapRegion* const heap_region_containing(const void* addr) const;
inline size_t heap_region_index_containing(const void* addr) const;
inline bool requires_marking(const void* entry) const;
template <class T>
! inline oop evac_update_with_forwarded(T* p, bool &evac);
template <class T>
inline oop maybe_update_with_forwarded(T* p);
template <class T>
--- 402,412 ----
inline ShenandoahHeapRegion* const heap_region_containing(const void* addr) const;
inline size_t heap_region_index_containing(const void* addr) const;
inline bool requires_marking(const void* entry) const;
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>
*** 437,447 ****
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_partial_in_progress(bool in_progress);
void set_concurrent_traversal_in_progress(bool in_progress);
void set_has_forwarded_objects(bool cond);
void set_process_references(bool pr);
void set_unload_classes(bool uc);
--- 437,446 ----
*** 452,471 ****
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_partial_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;
char gc_state() const;
bool process_references() const;
bool unload_classes() const;
inline bool region_in_collection_set(size_t region_index) const;
// Mainly there to avoid accidentally calling the templated
// method below with ShenandoahHeapRegion* which would be *wrong*.
inline bool in_collection_set(ShenandoahHeapRegion* r) const;
--- 451,473 ----
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;
char gc_state() const;
bool process_references() const;
bool unload_classes() const;
+ bool is_minor_gc() const;
+ bool is_major_gc() const;
+ void set_cycle_mode(GCCycleMode gc_cycle_mode);
+
inline bool region_in_collection_set(size_t region_index) const;
// Mainly there to avoid accidentally calling the templated
// method below with ShenandoahHeapRegion* which would be *wrong*.
inline bool in_collection_set(ShenandoahHeapRegion* r) const;
*** 481,493 ****
void set_complete_top_at_mark_start(HeapWord* region_base, HeapWord* addr);
HeapWord* complete_top_at_mark_start(HeapWord* region_base);
// Evacuates object src. Returns the evacuated object if this thread
// succeeded, otherwise rolls back the evacuation and returns the
! // evacuated object by the competing thread. 'succeeded' is an out
! // param and set to true if this thread succeeded, otherwise to false.
! inline oop evacuate_object(oop src, Thread* thread, bool& evacuated);
inline bool cancelled_concgc() const;
inline bool check_cancelled_concgc_and_yield(bool sts_active = true);
inline bool try_cancel_concgc();
inline void clear_cancelled_concgc();
--- 483,494 ----
void set_complete_top_at_mark_start(HeapWord* region_base, HeapWord* addr);
HeapWord* complete_top_at_mark_start(HeapWord* region_base);
// Evacuates object src. Returns the evacuated object if this thread
// succeeded, otherwise rolls back the evacuation and returns the
! // evacuated object by the competing thread.
! inline oop evacuate_object(oop src, Thread* thread);
inline bool cancelled_concgc() const;
inline bool check_cancelled_concgc_and_yield(bool sts_active = true);
inline bool try_cancel_concgc();
inline void clear_cancelled_concgc();
*** 513,522 ****
--- 514,524 ----
void notify_alloc(size_t words, bool waste);
void handle_heap_shrinkage(double shrink_before);
void reset_next_mark_bitmap();
+ void reset_next_mark_bitmap_traversal();
MarkBitMap* complete_mark_bit_map();
MarkBitMap* next_mark_bit_map();
inline bool is_marked_complete(oop obj) const;
inline bool mark_next(oop obj) const;
*** 545,555 ****
virtual GrowableArray<MemoryPool*> memory_pools();
ShenandoahMonitoringSupport* monitoring_support();
ShenandoahConcurrentMark* concurrentMark() { return _scm; }
ShenandoahMarkCompact* full_gc() { return _full_gc; }
- ShenandoahPartialGC* partial_gc();
ShenandoahTraversalGC* traversal_gc();
ShenandoahVerifier* verifier();
ShenandoahPacer* pacer() const;
ReferenceProcessor* ref_processor() { return _ref_processor;}
--- 547,556 ----
*** 685,696 ****
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_partial();
- void vmop_entry_final_partial();
void vmop_entry_init_traversal();
void vmop_entry_final_traversal();
void vmop_entry_full(GCCause::Cause cause);
void vmop_degenerated(ShenandoahDegenPoint point);
--- 686,695 ----
*** 699,710 ****
void entry_init_mark();
void entry_final_mark();
void entry_final_evac();
void entry_init_updaterefs();
void entry_final_updaterefs();
- void entry_init_partial();
- void entry_final_partial();
void entry_init_traversal();
void entry_final_traversal();
void entry_full(GCCause::Cause cause);
void entry_degenerated(int point);
--- 698,707 ----
*** 712,735 ****
// for concurrent operation.
void entry_mark();
void entry_preclean();
void entry_cleanup();
void entry_cleanup_bitmaps();
void entry_evac();
void entry_updaterefs();
- void entry_partial();
void entry_traversal();
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_partial();
- void op_final_partial();
void op_init_traversal();
void op_final_traversal();
void op_full(GCCause::Cause cause);
void op_degenerated(ShenandoahDegenPoint point);
void op_degenerated_fail();
--- 709,730 ----
// for concurrent operation.
void entry_mark();
void entry_preclean();
void entry_cleanup();
void entry_cleanup_bitmaps();
+ void entry_cleanup_traversal();
void entry_evac();
void entry_updaterefs();
void entry_traversal();
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();
*** 739,749 ****
void op_preclean();
void op_cleanup();
void op_evac();
void op_updaterefs();
void op_cleanup_bitmaps();
! void op_partial();
void op_traversal();
private:
void try_inject_alloc_failure();
bool should_inject_alloc_failure();
--- 734,744 ----
void op_preclean();
void op_cleanup();
void op_evac();
void op_updaterefs();
void op_cleanup_bitmaps();
! void op_cleanup_traversal();
void op_traversal();
private:
void try_inject_alloc_failure();
bool should_inject_alloc_failure();
< prev index next >