41 #include "utilities/macros.hpp"
42 #include "utilities/stack.inline.hpp"
43
44 uint MarkSweep::_total_invocations = 0;
45
46 Stack<oop, mtGC> MarkSweep::_marking_stack;
47 Stack<ObjArrayTask, mtGC> MarkSweep::_objarray_stack;
48
49 Stack<oop, mtGC> MarkSweep::_preserved_oop_stack;
50 Stack<markOop, mtGC> MarkSweep::_preserved_mark_stack;
51 size_t MarkSweep::_preserved_count = 0;
52 size_t MarkSweep::_preserved_count_max = 0;
53 PreservedMark* MarkSweep::_preserved_marks = NULL;
54 ReferenceProcessor* MarkSweep::_ref_processor = NULL;
55 STWGCTimer* MarkSweep::_gc_timer = NULL;
56 SerialOldTracer* MarkSweep::_gc_tracer = NULL;
57
58 MarkSweep::FollowRootClosure MarkSweep::follow_root_closure;
59
60 MarkAndPushClosure MarkSweep::mark_and_push_closure;
61 CLDToOopClosure MarkSweep::follow_cld_closure(&mark_and_push_closure, ClassLoaderData::_claim_value_strong);
62 CLDToOopClosure MarkSweep::adjust_cld_closure(&adjust_pointer_closure, ClassLoaderData::_claim_value_strong);
63
64 template <class T> inline void MarkSweep::KeepAliveClosure::do_oop_work(T* p) {
65 mark_and_push(p);
66 }
67
68 void MarkSweep::push_objarray(oop obj, size_t index) {
69 ObjArrayTask task(obj, index);
70 assert(task.is_valid(), "bad ObjArrayTask");
71 _objarray_stack.push(task);
72 }
73
74 inline void MarkSweep::follow_array(objArrayOop array) {
75 MarkSweep::follow_klass(array->klass());
76 // Don't push empty arrays to avoid unnecessary work.
77 if (array->length() > 0) {
78 MarkSweep::push_objarray(array, 0);
79 }
80 }
81
|
41 #include "utilities/macros.hpp"
42 #include "utilities/stack.inline.hpp"
43
44 uint MarkSweep::_total_invocations = 0;
45
46 Stack<oop, mtGC> MarkSweep::_marking_stack;
47 Stack<ObjArrayTask, mtGC> MarkSweep::_objarray_stack;
48
49 Stack<oop, mtGC> MarkSweep::_preserved_oop_stack;
50 Stack<markOop, mtGC> MarkSweep::_preserved_mark_stack;
51 size_t MarkSweep::_preserved_count = 0;
52 size_t MarkSweep::_preserved_count_max = 0;
53 PreservedMark* MarkSweep::_preserved_marks = NULL;
54 ReferenceProcessor* MarkSweep::_ref_processor = NULL;
55 STWGCTimer* MarkSweep::_gc_timer = NULL;
56 SerialOldTracer* MarkSweep::_gc_tracer = NULL;
57
58 MarkSweep::FollowRootClosure MarkSweep::follow_root_closure;
59
60 MarkAndPushClosure MarkSweep::mark_and_push_closure;
61 CLDToOopClosure MarkSweep::follow_cld_closure(&mark_and_push_closure, ClassLoaderData::_claim_strong);
62 CLDToOopClosure MarkSweep::adjust_cld_closure(&adjust_pointer_closure, ClassLoaderData::_claim_strong);
63
64 template <class T> inline void MarkSweep::KeepAliveClosure::do_oop_work(T* p) {
65 mark_and_push(p);
66 }
67
68 void MarkSweep::push_objarray(oop obj, size_t index) {
69 ObjArrayTask task(obj, index);
70 assert(task.is_valid(), "bad ObjArrayTask");
71 _objarray_stack.push(task);
72 }
73
74 inline void MarkSweep::follow_array(objArrayOop array) {
75 MarkSweep::follow_klass(array->klass());
76 // Don't push empty arrays to avoid unnecessary work.
77 if (array->length() > 0) {
78 MarkSweep::push_objarray(array, 0);
79 }
80 }
81
|