192 size_t initial_capacity() const; 193 size_t capacity() const; 194 size_t used() const; 195 size_t committed() const; 196 197 // ---------- Workers handling 198 // 199 private: 200 uint _max_workers; 201 ShenandoahWorkGang* _workers; 202 ShenandoahWorkGang* _safepoint_workers; 203 204 public: 205 uint max_workers(); 206 void assert_gc_workers(uint nworker) NOT_DEBUG_RETURN; 207 208 WorkGang* workers() const; 209 WorkGang* get_safepoint_workers(); 210 211 void gc_threads_do(ThreadClosure* tcl) const; 212 213 // ---------- Heap regions handling machinery 214 // 215 private: 216 MemRegion _heap_region; 217 bool _heap_region_special; 218 size_t _num_regions; 219 ShenandoahHeapRegion** _regions; 220 ShenandoahRegionIterator _update_refs_iterator; 221 222 public: 223 224 inline HeapWord* base() const { return _heap_region.start(); } 225 226 inline size_t num_regions() const { return _num_regions; } 227 inline bool is_heap_region_special() { return _heap_region_special; } 228 229 inline ShenandoahHeapRegion* const heap_region_containing(const void* addr) const; 230 inline size_t heap_region_index_containing(const void* addr) const; 231 599 MetaWord* satisfy_failed_metadata_allocation(ClassLoaderData* loader_data, 600 size_t size, 601 Metaspace::MetadataType mdtype); 602 603 void notify_mutator_alloc_words(size_t words, bool waste); 604 605 // Shenandoah supports TLAB allocation 606 bool supports_tlab_allocation() const { return true; } 607 608 HeapWord* allocate_new_tlab(size_t min_size, size_t requested_size, size_t* actual_size); 609 size_t tlab_capacity(Thread *thr) const; 610 size_t unsafe_max_tlab_alloc(Thread *thread) const; 611 size_t max_tlab_size() const; 612 size_t tlab_used(Thread* ignored) const; 613 614 void ensure_parsability(bool retire_labs); 615 616 void labs_make_parsable(); 617 void tlabs_retire(bool resize); 618 void gclabs_retire(bool resize); 619 620 // Runs the given AbstractGangTask with the current active workers. 621 // Returns the total time to run the task. 622 virtual void run_task(AbstractGangTask* task); 623 624 // ---------- Marking support 625 // 626 private: 627 ShenandoahMarkingContext* _marking_context; 628 MemRegion _bitmap_region; 629 MemRegion _aux_bitmap_region; 630 MarkBitMap _verification_bit_map; 631 MarkBitMap _aux_bit_map; 632 633 size_t _bitmap_size; 634 size_t _bitmap_regions_per_slice; 635 size_t _bitmap_bytes_per_slice; 636 637 size_t _pretouch_heap_page_size; 638 size_t _pretouch_bitmap_page_size; 639 640 bool _bitmap_region_special; 641 bool _aux_bitmap_region_special; 642 | 192 size_t initial_capacity() const; 193 size_t capacity() const; 194 size_t used() const; 195 size_t committed() const; 196 197 // ---------- Workers handling 198 // 199 private: 200 uint _max_workers; 201 ShenandoahWorkGang* _workers; 202 ShenandoahWorkGang* _safepoint_workers; 203 204 public: 205 uint max_workers(); 206 void assert_gc_workers(uint nworker) NOT_DEBUG_RETURN; 207 208 WorkGang* workers() const; 209 WorkGang* get_safepoint_workers(); 210 211 void gc_threads_do(ThreadClosure* tcl) const; 212 // Runs the given AbstractGangTask with the current active workers. 213 virtual void run_task(AbstractGangTask* task); 214 215 // ---------- Heap regions handling machinery 216 // 217 private: 218 MemRegion _heap_region; 219 bool _heap_region_special; 220 size_t _num_regions; 221 ShenandoahHeapRegion** _regions; 222 ShenandoahRegionIterator _update_refs_iterator; 223 224 public: 225 226 inline HeapWord* base() const { return _heap_region.start(); } 227 228 inline size_t num_regions() const { return _num_regions; } 229 inline bool is_heap_region_special() { return _heap_region_special; } 230 231 inline ShenandoahHeapRegion* const heap_region_containing(const void* addr) const; 232 inline size_t heap_region_index_containing(const void* addr) const; 233 601 MetaWord* satisfy_failed_metadata_allocation(ClassLoaderData* loader_data, 602 size_t size, 603 Metaspace::MetadataType mdtype); 604 605 void notify_mutator_alloc_words(size_t words, bool waste); 606 607 // Shenandoah supports TLAB allocation 608 bool supports_tlab_allocation() const { return true; } 609 610 HeapWord* allocate_new_tlab(size_t min_size, size_t requested_size, size_t* actual_size); 611 size_t tlab_capacity(Thread *thr) const; 612 size_t unsafe_max_tlab_alloc(Thread *thread) const; 613 size_t max_tlab_size() const; 614 size_t tlab_used(Thread* ignored) const; 615 616 void ensure_parsability(bool retire_labs); 617 618 void labs_make_parsable(); 619 void tlabs_retire(bool resize); 620 void gclabs_retire(bool resize); 621 622 // ---------- Marking support 623 // 624 private: 625 ShenandoahMarkingContext* _marking_context; 626 MemRegion _bitmap_region; 627 MemRegion _aux_bitmap_region; 628 MarkBitMap _verification_bit_map; 629 MarkBitMap _aux_bit_map; 630 631 size_t _bitmap_size; 632 size_t _bitmap_regions_per_slice; 633 size_t _bitmap_bytes_per_slice; 634 635 size_t _pretouch_heap_page_size; 636 size_t _pretouch_bitmap_page_size; 637 638 bool _bitmap_region_special; 639 bool _aux_bitmap_region_special; 640 |