149 if (PrintGC && Verbose) {
150 gclog_or_tty->print_cr("Restoring %d marks",
151 _preserved_count + _preserved_oop_stack.size());
152 }
153
154 // restore the marks we saved earlier
155 for (size_t i = 0; i < _preserved_count; i++) {
156 _preserved_marks[i].restore();
157 }
158
159 // deal with the overflow
160 while (!_preserved_oop_stack.is_empty()) {
161 oop obj = _preserved_oop_stack.pop();
162 markOop mark = _preserved_mark_stack.pop();
163 obj->set_mark(mark);
164 }
165 }
166
167 MarkSweep::IsAliveClosure MarkSweep::is_alive;
168
169 void MarkSweep::IsAliveClosure::do_object(oop p) { ShouldNotReachHere(); }
170 bool MarkSweep::IsAliveClosure::do_object_b(oop p) { return p->is_gc_marked(); }
171
172 MarkSweep::KeepAliveClosure MarkSweep::keep_alive;
173
174 void MarkSweep::KeepAliveClosure::do_oop(oop* p) { MarkSweep::KeepAliveClosure::do_oop_work(p); }
175 void MarkSweep::KeepAliveClosure::do_oop(narrowOop* p) { MarkSweep::KeepAliveClosure::do_oop_work(p); }
176
177 void marksweep_init() { /* empty */ }
178
179 #ifndef PRODUCT
180
181 void MarkSweep::trace(const char* msg) {
182 if (TraceMarkSweep)
183 gclog_or_tty->print("%s", msg);
184 }
185
186 #endif
|
149 if (PrintGC && Verbose) {
150 gclog_or_tty->print_cr("Restoring %d marks",
151 _preserved_count + _preserved_oop_stack.size());
152 }
153
154 // restore the marks we saved earlier
155 for (size_t i = 0; i < _preserved_count; i++) {
156 _preserved_marks[i].restore();
157 }
158
159 // deal with the overflow
160 while (!_preserved_oop_stack.is_empty()) {
161 oop obj = _preserved_oop_stack.pop();
162 markOop mark = _preserved_mark_stack.pop();
163 obj->set_mark(mark);
164 }
165 }
166
167 MarkSweep::IsAliveClosure MarkSweep::is_alive;
168
169 bool MarkSweep::IsAliveClosure::do_object_b(oop p) { return p->is_gc_marked(); }
170
171 MarkSweep::KeepAliveClosure MarkSweep::keep_alive;
172
173 void MarkSweep::KeepAliveClosure::do_oop(oop* p) { MarkSweep::KeepAliveClosure::do_oop_work(p); }
174 void MarkSweep::KeepAliveClosure::do_oop(narrowOop* p) { MarkSweep::KeepAliveClosure::do_oop_work(p); }
175
176 void marksweep_init() { /* empty */ }
177
178 #ifndef PRODUCT
179
180 void MarkSweep::trace(const char* msg) {
181 if (TraceMarkSweep)
182 gclog_or_tty->print("%s", msg);
183 }
184
185 #endif
|