diff -r 13588c901957 -r 9cf78a70fa4f src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp Thu Oct 17 20:27:44 2019 +0100 +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp Thu Oct 17 20:53:35 2019 +0100 @@ -43,6 +43,7 @@ class ShenandoahGCStateResetter; class ShenandoahHeuristics; class ShenandoahMarkingContext; +class ShenandoahMode; class ShenandoahPhaseTimings; class ShenandoahHeap; class ShenandoahHeapRegion; @@ -213,6 +214,9 @@ ShenandoahRegionIterator _update_refs_iterator; public: + + inline HeapWord* base() const { return _heap_region.start(); } + inline size_t num_regions() const { return _num_regions; } inline bool is_heap_region_special() { return _heap_region_special; } @@ -391,6 +395,7 @@ void entry_reset(); void entry_mark(); void entry_preclean(); + void entry_roots(); void entry_cleanup(); void entry_evac(); void entry_updaterefs(); @@ -414,6 +419,7 @@ void op_reset(); void op_mark(); void op_preclean(); + void op_roots(); void op_cleanup(); void op_conc_evac(); void op_stw_evac(); @@ -433,6 +439,7 @@ private: ShenandoahControlThread* _control_thread; ShenandoahCollectorPolicy* _shenandoah_policy; + ShenandoahMode* _gc_mode; ShenandoahHeuristics* _heuristics; ShenandoahFreeSet* _free_set; ShenandoahConcurrentMark* _scm; @@ -452,7 +459,8 @@ ShenandoahHeuristics* heuristics() const { return _heuristics; } ShenandoahFreeSet* free_set() const { return _free_set; } ShenandoahConcurrentMark* concurrent_mark() { return _scm; } - ShenandoahTraversalGC* traversal_gc() { return _traversal_gc; } + 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; } @@ -507,9 +515,12 @@ void set_unload_classes(bool uc); bool unload_classes() const; - // Delete entries for dead interned string and clean up unreferenced symbols - // in symbol table, possibly in parallel. - void unload_classes_and_cleanup_tables(bool full_gc); + // Perform STW class unloading and weak root cleaning + void parallel_cleaning(bool full_gc); + +private: + void stw_unload_classes(bool full_gc); + void stw_process_weak_roots(bool full_gc); // ---------- Generic interface hooks // Minor things that super-interface expects us to implement to play nice with @@ -522,12 +533,16 @@ bool is_in(const void* p) const; + MemRegion reserved_region() const { return _reserved; } + bool is_in_reserved(const void* addr) const { return _reserved.contains(addr); } + void collect(GCCause::Cause cause); void do_full_collection(bool clear_all_soft_refs); // Used for parsing heap during error printing HeapWord* block_start(const void* addr) const; bool block_is_obj(const HeapWord* addr) const; + bool print_location(outputStream* st, void* addr) const; // Used for native heap walkers: heap dumpers, mostly void object_iterate(ObjectClosure* cl); @@ -690,8 +705,9 @@ template inline oop update_with_forwarded_not_null(T* p, oop obj); - inline oop atomic_compare_exchange_oop(oop n, narrowOop* addr, oop c); - inline oop atomic_compare_exchange_oop(oop n, oop* addr, oop c); + static inline oop cas_oop(oop n, narrowOop* addr, oop c); + static inline oop cas_oop(oop n, oop* addr, oop c); + static inline oop cas_oop(oop n, narrowOop* addr, narrowOop c); void trash_humongous_region_at(ShenandoahHeapRegion *r);