52 protected:
53 template <class T> void do_oop_work(T* p);
54 public:
55 ParKeepAliveClosure(ParScanWeakRefClosure* cl);
56 virtual void do_oop(oop* p);
57 virtual void do_oop(narrowOop* p);
58 };
59
60 // The state needed by thread performing parallel young-gen collection.
61 class ParScanThreadState {
62 friend class ParScanThreadStateSet;
63 private:
64 ObjToScanQueue *_work_queue;
65 Stack<oop, mtGC>* const _overflow_stack;
66
67 ParGCAllocBuffer _to_space_alloc_buffer;
68
69 ParScanWithoutBarrierClosure _to_space_closure; // scan_without_gc_barrier
70 ParScanWithBarrierClosure _old_gen_closure; // scan_with_gc_barrier
71 ParRootScanWithoutBarrierClosure _to_space_root_closure; // scan_root_without_gc_barrier
72 // One of these two will be passed to process_strong_roots, which will
73 // set its generation. The first is for two-gen configs where the
74 // old gen collects the perm gen; the second is for arbitrary configs.
75 // The second isn't used right now (it used to be used for the train, an
76 // incremental collector) but the declaration has been left as a reminder.
77 ParRootScanWithBarrierTwoGensClosure _older_gen_closure;
78 // This closure will always be bound to the old gen; it will be used
79 // in evacuate_followers.
80 ParRootScanWithBarrierTwoGensClosure _old_gen_root_closure; // scan_old_root_with_gc_barrier
81 ParEvacuateFollowersClosure _evacuate_followers;
82 DefNewGeneration::IsAliveClosure _is_alive_closure;
83 ParScanWeakRefClosure _scan_weak_ref_closure;
84 ParKeepAliveClosure _keep_alive_closure;
85
86
87 Space* _to_space;
88 Space* to_space() { return _to_space; }
89
90 ParNewGeneration* _young_gen;
91 ParNewGeneration* young_gen() const { return _young_gen; }
92
|
52 protected:
53 template <class T> void do_oop_work(T* p);
54 public:
55 ParKeepAliveClosure(ParScanWeakRefClosure* cl);
56 virtual void do_oop(oop* p);
57 virtual void do_oop(narrowOop* p);
58 };
59
60 // The state needed by thread performing parallel young-gen collection.
61 class ParScanThreadState {
62 friend class ParScanThreadStateSet;
63 private:
64 ObjToScanQueue *_work_queue;
65 Stack<oop, mtGC>* const _overflow_stack;
66
67 ParGCAllocBuffer _to_space_alloc_buffer;
68
69 ParScanWithoutBarrierClosure _to_space_closure; // scan_without_gc_barrier
70 ParScanWithBarrierClosure _old_gen_closure; // scan_with_gc_barrier
71 ParRootScanWithoutBarrierClosure _to_space_root_closure; // scan_root_without_gc_barrier
72 // One of these two will be passed to process_roots, which will
73 // set its generation. The first is for two-gen configs where the
74 // old gen collects the perm gen; the second is for arbitrary configs.
75 // The second isn't used right now (it used to be used for the train, an
76 // incremental collector) but the declaration has been left as a reminder.
77 ParRootScanWithBarrierTwoGensClosure _older_gen_closure;
78 // This closure will always be bound to the old gen; it will be used
79 // in evacuate_followers.
80 ParRootScanWithBarrierTwoGensClosure _old_gen_root_closure; // scan_old_root_with_gc_barrier
81 ParEvacuateFollowersClosure _evacuate_followers;
82 DefNewGeneration::IsAliveClosure _is_alive_closure;
83 ParScanWeakRefClosure _scan_weak_ref_closure;
84 ParKeepAliveClosure _keep_alive_closure;
85
86
87 Space* _to_space;
88 Space* to_space() { return _to_space; }
89
90 ParNewGeneration* _young_gen;
91 ParNewGeneration* young_gen() const { return _young_gen; }
92
|