170 void track(PromotedObject* trackOop); // keep track of a promoted oop
171 // The following variant must be used when trackOop is not fully
172 // initialized and has a NULL klass:
173 void track(PromotedObject* trackOop, Klass* klassOfOop); // keep track of a promoted oop
174 void setSpace(CompactibleFreeListSpace* sp) { _space = sp; }
175 CompactibleFreeListSpace* space() const { return _space; }
176 markOop nextDisplacedHeader(); // get next header & forward spool pointer
177 void saveDisplacedHeader(markOop hdr);
178 // save header and forward spool
179
180 inline size_t refillSize() const;
181
182 SpoolBlock* getSpoolBlock(); // return a free spooling block
183 inline bool has_spooling_space() {
184 return _spoolTail != NULL && _spoolTail->bufferSize > _nextIndex;
185 }
186 // ensure that spooling space exists
187 bool ensure_spooling_space() {
188 return has_spooling_space() || ensure_spooling_space_work();
189 }
190 #define PROMOTED_OOPS_ITERATE_DECL(OopClosureType, nv_suffix) \
191 void promoted_oops_iterate##nv_suffix(OopClosureType* cl);
192 ALL_SINCE_SAVE_MARKS_CLOSURES(PROMOTED_OOPS_ITERATE_DECL)
193 #undef PROMOTED_OOPS_ITERATE_DECL
194 void promoted_oops_iterate(OopsInGenClosure* cl) {
195 promoted_oops_iterate_v(cl);
196 }
197 void verify() const;
198 void reset() {
199 _promoHead = NULL;
200 _promoTail = NULL;
201 _spoolHead = NULL;
202 _spoolTail = NULL;
203 _spareSpool = NULL;
204 _firstIndex = 0;
205 _nextIndex = 0;
206
207 }
208
209 void print_on(outputStream* st) const;
210 void print_statistics(uint worker_id) const;
211 };
212
213
214 #endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_PROMOTIONINFO_HPP
|
170 void track(PromotedObject* trackOop); // keep track of a promoted oop
171 // The following variant must be used when trackOop is not fully
172 // initialized and has a NULL klass:
173 void track(PromotedObject* trackOop, Klass* klassOfOop); // keep track of a promoted oop
174 void setSpace(CompactibleFreeListSpace* sp) { _space = sp; }
175 CompactibleFreeListSpace* space() const { return _space; }
176 markOop nextDisplacedHeader(); // get next header & forward spool pointer
177 void saveDisplacedHeader(markOop hdr);
178 // save header and forward spool
179
180 inline size_t refillSize() const;
181
182 SpoolBlock* getSpoolBlock(); // return a free spooling block
183 inline bool has_spooling_space() {
184 return _spoolTail != NULL && _spoolTail->bufferSize > _nextIndex;
185 }
186 // ensure that spooling space exists
187 bool ensure_spooling_space() {
188 return has_spooling_space() || ensure_spooling_space_work();
189 }
190
191 template <bool nv, typename OopClosureType>
192 void promoted_oops_iterate(OopClosureType* cl);
193
194 void verify() const;
195 void reset() {
196 _promoHead = NULL;
197 _promoTail = NULL;
198 _spoolHead = NULL;
199 _spoolTail = NULL;
200 _spareSpool = NULL;
201 _firstIndex = 0;
202 _nextIndex = 0;
203
204 }
205
206 void print_on(outputStream* st) const;
207 void print_statistics(uint worker_id) const;
208 };
209
210
211 #endif // SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_PROMOTIONINFO_HPP
|