src/hotspot/share/gc/shenandoah/shenandoahHeap.hpp
branchdatagramsocketimpl-branch
changeset 58678 9cf78a70fa4f
parent 55083 2fc6027f0eed
child 58679 9c3209ff7550
equal deleted inserted replaced
58677:13588c901957 58678:9cf78a70fa4f
    41 class ShenandoahControlThread;
    41 class ShenandoahControlThread;
    42 class ShenandoahGCSession;
    42 class ShenandoahGCSession;
    43 class ShenandoahGCStateResetter;
    43 class ShenandoahGCStateResetter;
    44 class ShenandoahHeuristics;
    44 class ShenandoahHeuristics;
    45 class ShenandoahMarkingContext;
    45 class ShenandoahMarkingContext;
       
    46 class ShenandoahMode;
    46 class ShenandoahPhaseTimings;
    47 class ShenandoahPhaseTimings;
    47 class ShenandoahHeap;
    48 class ShenandoahHeap;
    48 class ShenandoahHeapRegion;
    49 class ShenandoahHeapRegion;
    49 class ShenandoahHeapRegionClosure;
    50 class ShenandoahHeapRegionClosure;
    50 class ShenandoahCollectionSet;
    51 class ShenandoahCollectionSet;
   211   size_t    _num_regions;
   212   size_t    _num_regions;
   212   ShenandoahHeapRegion** _regions;
   213   ShenandoahHeapRegion** _regions;
   213   ShenandoahRegionIterator _update_refs_iterator;
   214   ShenandoahRegionIterator _update_refs_iterator;
   214 
   215 
   215 public:
   216 public:
       
   217 
       
   218   inline HeapWord* base() const { return _heap_region.start(); }
       
   219 
   216   inline size_t num_regions() const { return _num_regions; }
   220   inline size_t num_regions() const { return _num_regions; }
   217   inline bool is_heap_region_special() { return _heap_region_special; }
   221   inline bool is_heap_region_special() { return _heap_region_special; }
   218 
   222 
   219   inline ShenandoahHeapRegion* const heap_region_containing(const void* addr) const;
   223   inline ShenandoahHeapRegion* const heap_region_containing(const void* addr) const;
   220   inline size_t heap_region_index_containing(const void* addr) const;
   224   inline size_t heap_region_index_containing(const void* addr) const;
   389   // Entry methods to normally concurrent GC operations. These set up logging, monitoring
   393   // Entry methods to normally concurrent GC operations. These set up logging, monitoring
   390   // for concurrent operation.
   394   // for concurrent operation.
   391   void entry_reset();
   395   void entry_reset();
   392   void entry_mark();
   396   void entry_mark();
   393   void entry_preclean();
   397   void entry_preclean();
       
   398   void entry_roots();
   394   void entry_cleanup();
   399   void entry_cleanup();
   395   void entry_evac();
   400   void entry_evac();
   396   void entry_updaterefs();
   401   void entry_updaterefs();
   397   void entry_traversal();
   402   void entry_traversal();
   398   void entry_uncommit(double shrink_before);
   403   void entry_uncommit(double shrink_before);
   412   void op_degenerated_futile();
   417   void op_degenerated_futile();
   413 
   418 
   414   void op_reset();
   419   void op_reset();
   415   void op_mark();
   420   void op_mark();
   416   void op_preclean();
   421   void op_preclean();
       
   422   void op_roots();
   417   void op_cleanup();
   423   void op_cleanup();
   418   void op_conc_evac();
   424   void op_conc_evac();
   419   void op_stw_evac();
   425   void op_stw_evac();
   420   void op_updaterefs();
   426   void op_updaterefs();
   421   void op_traversal();
   427   void op_traversal();
   431 // ---------- GC subsystems
   437 // ---------- GC subsystems
   432 //
   438 //
   433 private:
   439 private:
   434   ShenandoahControlThread*   _control_thread;
   440   ShenandoahControlThread*   _control_thread;
   435   ShenandoahCollectorPolicy* _shenandoah_policy;
   441   ShenandoahCollectorPolicy* _shenandoah_policy;
       
   442   ShenandoahMode*            _gc_mode;
   436   ShenandoahHeuristics*      _heuristics;
   443   ShenandoahHeuristics*      _heuristics;
   437   ShenandoahFreeSet*         _free_set;
   444   ShenandoahFreeSet*         _free_set;
   438   ShenandoahConcurrentMark*  _scm;
   445   ShenandoahConcurrentMark*  _scm;
   439   ShenandoahTraversalGC*     _traversal_gc;
   446   ShenandoahTraversalGC*     _traversal_gc;
   440   ShenandoahMarkCompact*     _full_gc;
   447   ShenandoahMarkCompact*     _full_gc;
   450 public:
   457 public:
   451   ShenandoahCollectorPolicy* shenandoah_policy() const { return _shenandoah_policy; }
   458   ShenandoahCollectorPolicy* shenandoah_policy() const { return _shenandoah_policy; }
   452   ShenandoahHeuristics*      heuristics()        const { return _heuristics;        }
   459   ShenandoahHeuristics*      heuristics()        const { return _heuristics;        }
   453   ShenandoahFreeSet*         free_set()          const { return _free_set;          }
   460   ShenandoahFreeSet*         free_set()          const { return _free_set;          }
   454   ShenandoahConcurrentMark*  concurrent_mark()         { return _scm;               }
   461   ShenandoahConcurrentMark*  concurrent_mark()         { return _scm;               }
   455   ShenandoahTraversalGC*     traversal_gc()            { return _traversal_gc;      }
   462   ShenandoahTraversalGC*     traversal_gc()      const { return _traversal_gc;      }
       
   463   bool                       is_traversal_mode() const { return _traversal_gc != NULL; }
   456   ShenandoahPacer*           pacer()             const { return _pacer;             }
   464   ShenandoahPacer*           pacer()             const { return _pacer;             }
   457 
   465 
   458   ShenandoahPhaseTimings*    phase_timings()     const { return _phase_timings;     }
   466   ShenandoahPhaseTimings*    phase_timings()     const { return _phase_timings;     }
   459   ShenandoahAllocTracker*    alloc_tracker()     const { return _alloc_tracker;     }
   467   ShenandoahAllocTracker*    alloc_tracker()     const { return _alloc_tracker;     }
   460 
   468 
   505 
   513 
   506 public:
   514 public:
   507   void set_unload_classes(bool uc);
   515   void set_unload_classes(bool uc);
   508   bool unload_classes() const;
   516   bool unload_classes() const;
   509 
   517 
   510   // Delete entries for dead interned string and clean up unreferenced symbols
   518   // Perform STW class unloading and weak root cleaning
   511   // in symbol table, possibly in parallel.
   519   void parallel_cleaning(bool full_gc);
   512   void unload_classes_and_cleanup_tables(bool full_gc);
   520 
       
   521 private:
       
   522   void stw_unload_classes(bool full_gc);
       
   523   void stw_process_weak_roots(bool full_gc);
   513 
   524 
   514 // ---------- Generic interface hooks
   525 // ---------- Generic interface hooks
   515 // Minor things that super-interface expects us to implement to play nice with
   526 // Minor things that super-interface expects us to implement to play nice with
   516 // the rest of runtime. Some of the things here are not required to be implemented,
   527 // the rest of runtime. Some of the things here are not required to be implemented,
   517 // and can be stubbed out.
   528 // and can be stubbed out.
   520   AdaptiveSizePolicy* size_policy() shenandoah_not_implemented_return(NULL);
   531   AdaptiveSizePolicy* size_policy() shenandoah_not_implemented_return(NULL);
   521   bool is_maximal_no_gc() const shenandoah_not_implemented_return(false);
   532   bool is_maximal_no_gc() const shenandoah_not_implemented_return(false);
   522 
   533 
   523   bool is_in(const void* p) const;
   534   bool is_in(const void* p) const;
   524 
   535 
       
   536   MemRegion reserved_region() const { return _reserved; }
       
   537   bool is_in_reserved(const void* addr) const { return _reserved.contains(addr); }
       
   538 
   525   void collect(GCCause::Cause cause);
   539   void collect(GCCause::Cause cause);
   526   void do_full_collection(bool clear_all_soft_refs);
   540   void do_full_collection(bool clear_all_soft_refs);
   527 
   541 
   528   // Used for parsing heap during error printing
   542   // Used for parsing heap during error printing
   529   HeapWord* block_start(const void* addr) const;
   543   HeapWord* block_start(const void* addr) const;
   530   bool block_is_obj(const HeapWord* addr) const;
   544   bool block_is_obj(const HeapWord* addr) const;
       
   545   bool print_location(outputStream* st, void* addr) const;
   531 
   546 
   532   // Used for native heap walkers: heap dumpers, mostly
   547   // Used for native heap walkers: heap dumpers, mostly
   533   void object_iterate(ObjectClosure* cl);
   548   void object_iterate(ObjectClosure* cl);
   534   void safe_object_iterate(ObjectClosure* cl);
   549   void safe_object_iterate(ObjectClosure* cl);
   535 
   550 
   688   inline oop maybe_update_with_forwarded_not_null(T* p, oop obj);
   703   inline oop maybe_update_with_forwarded_not_null(T* p, oop obj);
   689 
   704 
   690   template <class T>
   705   template <class T>
   691   inline oop update_with_forwarded_not_null(T* p, oop obj);
   706   inline oop update_with_forwarded_not_null(T* p, oop obj);
   692 
   707 
   693   inline oop atomic_compare_exchange_oop(oop n, narrowOop* addr, oop c);
   708   static inline oop cas_oop(oop n, narrowOop* addr, oop c);
   694   inline oop atomic_compare_exchange_oop(oop n, oop* addr, oop c);
   709   static inline oop cas_oop(oop n, oop* addr, oop c);
       
   710   static inline oop cas_oop(oop n, narrowOop* addr, narrowOop c);
   695 
   711 
   696   void trash_humongous_region_at(ShenandoahHeapRegion *r);
   712   void trash_humongous_region_at(ShenandoahHeapRegion *r);
   697 
   713 
   698   void deduplicate_string(oop str);
   714   void deduplicate_string(oop str);
   699 
   715