< prev index next >

src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp

Print this page




5028   bool claim_clean_klass_tree_task() {
5029     if (_clean_klass_tree_claimed) {
5030       return false;
5031     }
5032 
5033     return Atomic::cmpxchg(1, (jint*)&_clean_klass_tree_claimed, 0) == 0;
5034   }
5035 
5036   InstanceKlass* claim_next_klass() {
5037     Klass* klass;
5038     do {
5039       klass =_klass_iterator.next_klass();
5040     } while (klass != NULL && !klass->oop_is_instance());
5041 
5042     return (InstanceKlass*)klass;
5043   }
5044 
5045 public:
5046 
5047   void clean_klass(InstanceKlass* ik) {
5048     ik->clean_implementors_list(_is_alive);
5049     ik->clean_method_data(_is_alive);
5050 
5051     // G1 specific cleanup work that has
5052     // been moved here to be done in parallel.
5053     ik->clean_dependent_nmethods();
5054     if (JvmtiExport::has_redefined_a_class()) {
5055       InstanceKlass::purge_previous_versions(ik);
5056     }
5057   }
5058 
5059   void work() {
5060     ResourceMark rm;
5061 
5062     // One worker will clean the subklass/sibling klass tree.
5063     if (claim_clean_klass_tree_task()) {
5064       Klass::clean_subklass_tree(_is_alive);
5065     }
5066 
5067     // All workers will help cleaning the classes,
5068     InstanceKlass* klass;
5069     while ((klass = claim_next_klass()) != NULL) {
5070       clean_klass(klass);
5071     }
5072   }
5073 };




5028   bool claim_clean_klass_tree_task() {
5029     if (_clean_klass_tree_claimed) {
5030       return false;
5031     }
5032 
5033     return Atomic::cmpxchg(1, (jint*)&_clean_klass_tree_claimed, 0) == 0;
5034   }
5035 
5036   InstanceKlass* claim_next_klass() {
5037     Klass* klass;
5038     do {
5039       klass =_klass_iterator.next_klass();
5040     } while (klass != NULL && !klass->oop_is_instance());
5041 
5042     return (InstanceKlass*)klass;
5043   }
5044 
5045 public:
5046 
5047   void clean_klass(InstanceKlass* ik) {
5048     ik->clean_weak_instanceklass_links(_is_alive);

5049 



5050     if (JvmtiExport::has_redefined_a_class()) {
5051       InstanceKlass::purge_previous_versions(ik);
5052     }
5053   }
5054 
5055   void work() {
5056     ResourceMark rm;
5057 
5058     // One worker will clean the subklass/sibling klass tree.
5059     if (claim_clean_klass_tree_task()) {
5060       Klass::clean_subklass_tree(_is_alive);
5061     }
5062 
5063     // All workers will help cleaning the classes,
5064     InstanceKlass* klass;
5065     while ((klass = claim_next_klass()) != NULL) {
5066       clean_klass(klass);
5067     }
5068   }
5069 };


< prev index next >