150 _last_enqueued_card = card_index;
151 }
152 }
153
154 G1EvacuationRootClosures* closures() { return _closures; }
155 uint worker_id() { return _worker_id; }
156
157 size_t lab_waste_words() const;
158 size_t lab_undo_waste_words() const;
159
160 // Pass locally gathered statistics to global state. Returns the total number of
161 // HeapWords copied.
162 size_t flush(size_t* surviving_young_words);
163
164 private:
165 void do_partial_array(PartialArrayScanTask task);
166 void start_partial_objarray(G1HeapRegionAttr dest_dir, oop from, oop to);
167
168 HeapWord* allocate_copy_slow(G1HeapRegionAttr* dest_attr,
169 oop old,
170 size_t word_sz,
171 uint age,
172 uint node_index);
173
174 void undo_allocation(G1HeapRegionAttr dest_addr,
175 HeapWord* obj_ptr,
176 size_t word_sz,
177 uint node_index);
178
179 oop do_copy_to_survivor_space(G1HeapRegionAttr region_attr,
180 oop obj,
181 markWord old_mark);
182
183 // This method is applied to the fields of the objects that have just been copied.
184 template <class T> void do_oop_evac(T* p);
185
186 void dispatch_task(ScannerTask task);
187
188 // Tries to allocate word_sz in the PLAB of the next "generation" after trying to
189 // allocate into dest. Previous_plab_refill_failed indicates whether previous
190 // PLAB refill for the original (source) object failed.
191 // Returns a non-NULL pointer if successful, and updates dest if required.
192 // Also determines whether we should continue to try to allocate into the various
193 // generations or just end trying to allocate.
194 HeapWord* allocate_in_next_plab(G1HeapRegionAttr* dest,
195 size_t word_sz,
196 bool previous_plab_refill_failed,
197 uint node_index);
198
199 inline G1HeapRegionAttr next_region_attr(G1HeapRegionAttr const region_attr, markWord const m, uint& age);
200
201 void report_promotion_event(G1HeapRegionAttr const dest_attr,
202 oop const old, size_t word_sz, uint age,
203 HeapWord * const obj_ptr, uint node_index) const;
204
205 void trim_queue_to_threshold(uint threshold);
206
207 inline bool needs_partial_trimming() const;
208
209 // NUMA statistics related methods.
210 void initialize_numa_stats();
211 void flush_numa_stats();
212 inline void update_numa_stats(uint node_index);
213
214 public:
215 oop copy_to_survivor_space(G1HeapRegionAttr region_attr, oop obj, markWord old_mark);
216
217 inline void trim_queue();
218 inline void trim_queue_partially();
219 void steal_and_trim_queue(G1ScannerTasksQueueSet *task_queues);
220
221 Tickspan trim_ticks() const;
222 void reset_trim_ticks();
|
150 _last_enqueued_card = card_index;
151 }
152 }
153
154 G1EvacuationRootClosures* closures() { return _closures; }
155 uint worker_id() { return _worker_id; }
156
157 size_t lab_waste_words() const;
158 size_t lab_undo_waste_words() const;
159
160 // Pass locally gathered statistics to global state. Returns the total number of
161 // HeapWords copied.
162 size_t flush(size_t* surviving_young_words);
163
164 private:
165 void do_partial_array(PartialArrayScanTask task);
166 void start_partial_objarray(G1HeapRegionAttr dest_dir, oop from, oop to);
167
168 HeapWord* allocate_copy_slow(G1HeapRegionAttr* dest_attr,
169 oop old,
170 Klass* klass,
171 size_t word_sz,
172 uint age,
173 uint node_index);
174
175 void undo_allocation(G1HeapRegionAttr dest_addr,
176 HeapWord* obj_ptr,
177 size_t word_sz,
178 uint node_index);
179
180 oop do_copy_to_survivor_space(G1HeapRegionAttr region_attr,
181 oop obj,
182 markWord old_mark);
183
184 // This method is applied to the fields of the objects that have just been copied.
185 template <class T> void do_oop_evac(T* p);
186
187 void dispatch_task(ScannerTask task);
188
189 // Tries to allocate word_sz in the PLAB of the next "generation" after trying to
190 // allocate into dest. Previous_plab_refill_failed indicates whether previous
191 // PLAB refill for the original (source) object failed.
192 // Returns a non-NULL pointer if successful, and updates dest if required.
193 // Also determines whether we should continue to try to allocate into the various
194 // generations or just end trying to allocate.
195 HeapWord* allocate_in_next_plab(G1HeapRegionAttr* dest,
196 size_t word_sz,
197 bool previous_plab_refill_failed,
198 uint node_index);
199
200 inline G1HeapRegionAttr next_region_attr(G1HeapRegionAttr const region_attr, markWord const m, uint& age);
201
202 void report_promotion_event(G1HeapRegionAttr const dest_attr,
203 oop const old, Klass* klass, size_t word_sz, uint age,
204 HeapWord * const obj_ptr, uint node_index) const;
205
206 void trim_queue_to_threshold(uint threshold);
207
208 inline bool needs_partial_trimming() const;
209
210 // NUMA statistics related methods.
211 void initialize_numa_stats();
212 void flush_numa_stats();
213 inline void update_numa_stats(uint node_index);
214
215 public:
216 oop copy_to_survivor_space(G1HeapRegionAttr region_attr, oop obj, markWord old_mark);
217
218 inline void trim_queue();
219 inline void trim_queue_partially();
220 void steal_and_trim_queue(G1ScannerTasksQueueSet *task_queues);
221
222 Tickspan trim_ticks() const;
223 void reset_trim_ticks();
|