102 // Provides mutual exclusive access of _shadow_region_array.
103 // See pop/push_shadow_region_mt_safe() below
104 static Monitor* _shadow_region_monitor;
105
106 StringDedup::Requests _string_dedup_requests;
107
108 static PSOldGen* old_gen() { return _old_gen; }
109 static ObjectStartArray* start_array() { return _start_array; }
110 static PSMarkTasksQueueSet* marking_stacks() { return _marking_stacks; }
111
112 static void initialize(ParMarkBitMap* mbm);
113
114 ParCompactionManager(PreservedMarks* preserved_marks,
115 ReferenceProcessor* ref_processor,
116 uint parallel_gc_threads);
117
118 // Array of task queues. Needed by the task terminator.
119 static RegionTaskQueueSet* region_task_queues() { return _region_task_queues; }
120
121 inline PSMarkTaskQueue* marking_stack() { return &_marking_stack; }
122 void push_objArray(oop obj);
123
124 // To collect per-region live-words in a worker local cache in order to
125 // reduce threads contention.
126 class MarkingStatsCache : public CHeapObj<mtGC> {
127 constexpr static size_t num_entries = 1024;
128 static_assert(is_power_of_2(num_entries), "inv");
129 static_assert(num_entries > 0, "inv");
130
131 constexpr static size_t entry_mask = num_entries - 1;
132
133 struct CacheEntry {
134 size_t region_id;
135 size_t live_words;
136 };
137
138 CacheEntry entries[num_entries] = {};
139
140 inline void push(size_t region_id, size_t live_words);
141
142 public:
|
102 // Provides mutual exclusive access of _shadow_region_array.
103 // See pop/push_shadow_region_mt_safe() below
104 static Monitor* _shadow_region_monitor;
105
106 StringDedup::Requests _string_dedup_requests;
107
108 static PSOldGen* old_gen() { return _old_gen; }
109 static ObjectStartArray* start_array() { return _start_array; }
110 static PSMarkTasksQueueSet* marking_stacks() { return _marking_stacks; }
111
112 static void initialize(ParMarkBitMap* mbm);
113
114 ParCompactionManager(PreservedMarks* preserved_marks,
115 ReferenceProcessor* ref_processor,
116 uint parallel_gc_threads);
117
118 // Array of task queues. Needed by the task terminator.
119 static RegionTaskQueueSet* region_task_queues() { return _region_task_queues; }
120
121 inline PSMarkTaskQueue* marking_stack() { return &_marking_stack; }
122 void push_objArray(objArrayOop obj);
123
124 // To collect per-region live-words in a worker local cache in order to
125 // reduce threads contention.
126 class MarkingStatsCache : public CHeapObj<mtGC> {
127 constexpr static size_t num_entries = 1024;
128 static_assert(is_power_of_2(num_entries), "inv");
129 static_assert(num_entries > 0, "inv");
130
131 constexpr static size_t entry_mask = num_entries - 1;
132
133 struct CacheEntry {
134 size_t region_id;
135 size_t live_words;
136 };
137
138 CacheEntry entries[num_entries] = {};
139
140 inline void push(size_t region_id, size_t live_words);
141
142 public:
|