101 template<class T, UpdateRefsMode UPDATE_REFS, bool STRING_DEDUP>
102 static inline void mark_through_ref(T* p, ShenandoahHeap* heap, ShenandoahObjToScanQueue* q, ShenandoahStrDedupQueue* dq = NULL);
103
104 void mark_from_roots();
105
106 // Prepares unmarked root objects by marking them and putting
107 // them into the marking task queue.
108 void init_mark_roots();
109 void mark_roots(ShenandoahPhaseTimings::Phase root_phase);
110 void update_roots(ShenandoahPhaseTimings::Phase root_phase);
111
112 void shared_finish_mark_from_roots(bool full_gc);
113 void finish_mark_from_roots();
114 // Those are only needed public because they're called from closures.
115
116 inline bool try_queue(ShenandoahObjToScanQueue* q, ShenandoahMarkTask &task);
117
118 ShenandoahObjToScanQueue* get_queue(uint worker_id);
119 void clear_queue(ShenandoahObjToScanQueue *q);
120
121 void drain_satb_buffers(uint worker_id);
122 ShenandoahObjToScanQueueSet* task_queues() { return _task_queues;}
123
124 jushort* get_liveness(uint worker_id);
125
126 void cancel();
127
128 void preclean_weak_refs();
129
130 void concurrent_scan_code_roots(uint worker_id, ReferenceProcessor* rp, bool update_ref);
131 private:
132
133 void weak_refs_work(bool full_gc);
134 void weak_refs_work_doit(bool full_gc);
135
136 #if TASKQUEUE_STATS
137 static void print_taskqueue_stats_hdr(outputStream* const st);
138 void print_taskqueue_stats() const;
139 void reset_taskqueue_stats();
140 #endif // TASKQUEUE_STATS
141
|
101 template<class T, UpdateRefsMode UPDATE_REFS, bool STRING_DEDUP>
102 static inline void mark_through_ref(T* p, ShenandoahHeap* heap, ShenandoahObjToScanQueue* q, ShenandoahStrDedupQueue* dq = NULL);
103
104 void mark_from_roots();
105
106 // Prepares unmarked root objects by marking them and putting
107 // them into the marking task queue.
108 void init_mark_roots();
109 void mark_roots(ShenandoahPhaseTimings::Phase root_phase);
110 void update_roots(ShenandoahPhaseTimings::Phase root_phase);
111
112 void shared_finish_mark_from_roots(bool full_gc);
113 void finish_mark_from_roots();
114 // Those are only needed public because they're called from closures.
115
116 inline bool try_queue(ShenandoahObjToScanQueue* q, ShenandoahMarkTask &task);
117
118 ShenandoahObjToScanQueue* get_queue(uint worker_id);
119 void clear_queue(ShenandoahObjToScanQueue *q);
120
121 ShenandoahObjToScanQueueSet* task_queues() { return _task_queues;}
122
123 jushort* get_liveness(uint worker_id);
124
125 void cancel();
126
127 void preclean_weak_refs();
128
129 void concurrent_scan_code_roots(uint worker_id, ReferenceProcessor* rp, bool update_ref);
130 private:
131
132 void weak_refs_work(bool full_gc);
133 void weak_refs_work_doit(bool full_gc);
134
135 #if TASKQUEUE_STATS
136 static void print_taskqueue_stats_hdr(outputStream* const st);
137 void print_taskqueue_stats() const;
138 void reset_taskqueue_stats();
139 #endif // TASKQUEUE_STATS
140
|