hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp
void MarkSweep::follow_stack() {
{- -------------------------------------------
(1)
---------------------------------------- -}
do {
while (!_marking_stack.is_empty()) {
oop obj = _marking_stack.pop();
assert (obj->is_gc_marked(), "p must be marked");
obj->follow_contents();
}
// Process ObjArrays one at a time to avoid marking stack bloat.
if (!_objarray_stack.is_empty()) {
ObjArrayTask task = _objarray_stack.pop();
objArrayKlass* const k = (objArrayKlass*)task.obj()->blueprint();
k->oop_follow_contents(task.obj(), task.index());
}
} while (!_marking_stack.is_empty() || !_objarray_stack.is_empty());
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.