256 typedef ShenandoahRootScanner<ShenandoahCsetCodeRootsIterator> ShenandoahCSetRootScanner;
257
258 // This scanner is only for SH::object_iteration() and only supports single-threaded
259 // root scanning
260 class ShenandoahHeapIterationRootScanner : public ShenandoahRootProcessor {
261 private:
262 ShenandoahSerialRoots _serial_roots;
263 ShenandoahThreadRoots _thread_roots;
264 ShenandoahVMRoots<false /*concurrent*/> _vm_roots;
265 ShenandoahClassLoaderDataRoots<false /*concurrent*/, true /*single threaded*/>
266 _cld_roots;
267 ShenandoahSerialWeakRoots _serial_weak_roots;
268 ShenandoahWeakRoots<false /*concurrent*/> _weak_roots;
269 ShenandoahConcurrentStringDedupRoots _dedup_roots;
270 ShenandoahCodeCacheRoots<ShenandoahAllCodeRootsIterator> _code_roots;
271
272 public:
273 ShenandoahHeapIterationRootScanner();
274
275 void roots_do(OopClosure* cl);
276 void strong_roots_do(OopClosure* cl);
277 };
278
279 // Evacuate all roots at a safepoint
280 class ShenandoahRootEvacuator : public ShenandoahRootProcessor {
281 private:
282 ShenandoahSerialRoots _serial_roots;
283 ShenandoahVMRoots<false /*concurrent*/> _vm_roots;
284 ShenandoahClassLoaderDataRoots<false /*concurrent*/, false /*single threaded*/>
285 _cld_roots;
286 ShenandoahThreadRoots _thread_roots;
287 ShenandoahSerialWeakRoots _serial_weak_roots;
288 ShenandoahWeakRoots<false /*concurrent*/> _weak_roots;
289 ShenandoahStringDedupRoots _dedup_roots;
290 ShenandoahCodeCacheRoots<ShenandoahAllCodeRootsIterator> _code_roots;
291 bool _include_concurrent_roots;
292 bool _include_concurrent_code_roots;
293 public:
294 ShenandoahRootEvacuator(uint n_workers, ShenandoahPhaseTimings::Phase phase,
295 bool include_concurrent_roots, bool _include_concurrent_code_roots);
296
|
256 typedef ShenandoahRootScanner<ShenandoahCsetCodeRootsIterator> ShenandoahCSetRootScanner;
257
258 // This scanner is only for SH::object_iteration() and only supports single-threaded
259 // root scanning
260 class ShenandoahHeapIterationRootScanner : public ShenandoahRootProcessor {
261 private:
262 ShenandoahSerialRoots _serial_roots;
263 ShenandoahThreadRoots _thread_roots;
264 ShenandoahVMRoots<false /*concurrent*/> _vm_roots;
265 ShenandoahClassLoaderDataRoots<false /*concurrent*/, true /*single threaded*/>
266 _cld_roots;
267 ShenandoahSerialWeakRoots _serial_weak_roots;
268 ShenandoahWeakRoots<false /*concurrent*/> _weak_roots;
269 ShenandoahConcurrentStringDedupRoots _dedup_roots;
270 ShenandoahCodeCacheRoots<ShenandoahAllCodeRootsIterator> _code_roots;
271
272 public:
273 ShenandoahHeapIterationRootScanner();
274
275 void roots_do(OopClosure* cl);
276 };
277
278 // Evacuate all roots at a safepoint
279 class ShenandoahRootEvacuator : public ShenandoahRootProcessor {
280 private:
281 ShenandoahSerialRoots _serial_roots;
282 ShenandoahVMRoots<false /*concurrent*/> _vm_roots;
283 ShenandoahClassLoaderDataRoots<false /*concurrent*/, false /*single threaded*/>
284 _cld_roots;
285 ShenandoahThreadRoots _thread_roots;
286 ShenandoahSerialWeakRoots _serial_weak_roots;
287 ShenandoahWeakRoots<false /*concurrent*/> _weak_roots;
288 ShenandoahStringDedupRoots _dedup_roots;
289 ShenandoahCodeCacheRoots<ShenandoahAllCodeRootsIterator> _code_roots;
290 bool _include_concurrent_roots;
291 bool _include_concurrent_code_roots;
292 public:
293 ShenandoahRootEvacuator(uint n_workers, ShenandoahPhaseTimings::Phase phase,
294 bool include_concurrent_roots, bool _include_concurrent_code_roots);
295
|