112
113 bool mut_process_buffer(BufferNode* node);
114
115 // If the queue contains more buffers than configured here, the
116 // mutator must start doing some of the concurrent refinement work,
117 size_t _max_completed_buffers;
118 size_t _completed_buffers_padding;
119 static const size_t MaxCompletedBuffersUnlimited = SIZE_MAX;
120
121 G1FreeIdSet* _free_ids;
122
123 // The number of completed buffers processed by mutator and rs thread,
124 // respectively.
125 jint _processed_buffers_mut;
126 jint _processed_buffers_rs_thread;
127
128 public:
129 G1DirtyCardQueueSet(bool notify_when_complete = true);
130 ~G1DirtyCardQueueSet();
131
132 void initialize(Monitor* cbl_mon,
133 BufferNode::Allocator* allocator,
134 bool init_free_ids = false);
135
136 // The number of parallel ids that can be claimed to allow collector or
137 // mutator threads to do card-processing work.
138 static uint num_par_ids();
139
140 static void handle_zero_index_for_thread(Thread* t);
141
142 // Either process the entire buffer and return true, or enqueue the
143 // buffer and return false. If the buffer is completely processed,
144 // it can be reused in place.
145 bool process_or_enqueue_completed_buffer(BufferNode* node);
146
147 virtual void enqueue_completed_buffer(BufferNode* node);
148
149 // If the number of completed buffers is > stop_at, then remove and
150 // return a completed buffer from the list. Otherwise, return NULL.
151 BufferNode* get_completed_buffer(size_t stop_at = 0);
152
153 // The number of buffers in the list. Derived as an approximation from the number
154 // of entries in the buffers. Racy.
|
112
113 bool mut_process_buffer(BufferNode* node);
114
115 // If the queue contains more buffers than configured here, the
116 // mutator must start doing some of the concurrent refinement work,
117 size_t _max_completed_buffers;
118 size_t _completed_buffers_padding;
119 static const size_t MaxCompletedBuffersUnlimited = SIZE_MAX;
120
121 G1FreeIdSet* _free_ids;
122
123 // The number of completed buffers processed by mutator and rs thread,
124 // respectively.
125 jint _processed_buffers_mut;
126 jint _processed_buffers_rs_thread;
127
128 public:
129 G1DirtyCardQueueSet(bool notify_when_complete = true);
130 ~G1DirtyCardQueueSet();
131
132 void initialize(Monitor* cbl_mon, BufferNode::Allocator* allocator);
133
134 // The number of parallel ids that can be claimed to allow collector or
135 // mutator threads to do card-processing work.
136 static uint num_par_ids();
137
138 static void handle_zero_index_for_thread(Thread* t);
139
140 // Either process the entire buffer and return true, or enqueue the
141 // buffer and return false. If the buffer is completely processed,
142 // it can be reused in place.
143 bool process_or_enqueue_completed_buffer(BufferNode* node);
144
145 virtual void enqueue_completed_buffer(BufferNode* node);
146
147 // If the number of completed buffers is > stop_at, then remove and
148 // return a completed buffer from the list. Otherwise, return NULL.
149 BufferNode* get_completed_buffer(size_t stop_at = 0);
150
151 // The number of buffers in the list. Derived as an approximation from the number
152 // of entries in the buffers. Racy.
|