< prev index next >

src/hotspot/share/gc/serial/markSweep.cpp

CLD claiming v2

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 
< prev index next >