126 127 ~DependencyContext() { 128 // Base oop relocation invalidates _dependency_context_addr. 129 assert(_base_oop == _base(), "base oop relocation is forbidden"); 130 } 131 #else 132 DependencyContext(intptr_t* addr) : _dependency_context_addr(addr) {} 133 #endif // ASSERT 134 135 static const intptr_t EMPTY = 0; // dependencies = NULL, has_stale_entries = false 136 137 static void init(); 138 139 int mark_dependent_nmethods(DepChange& changes); 140 void add_dependent_nmethod(nmethod* nm, bool expunge_stale_entries = false); 141 void remove_dependent_nmethod(nmethod* nm, bool expunge_stale_entries = false); 142 int remove_all_dependents(); 143 144 void expunge_stale_entries(); 145 146 #ifndef PRODUCT 147 void print_dependent_nmethods(bool verbose); 148 bool is_dependent_nmethod(nmethod* nm); 149 bool find_stale_entries(); 150 #endif //PRODUCT 151 }; 152 #endif // SHARE_VM_CODE_DEPENDENCYCONTEXT_HPP | 126 127 ~DependencyContext() { 128 // Base oop relocation invalidates _dependency_context_addr. 129 assert(_base_oop == _base(), "base oop relocation is forbidden"); 130 } 131 #else 132 DependencyContext(intptr_t* addr) : _dependency_context_addr(addr) {} 133 #endif // ASSERT 134 135 static const intptr_t EMPTY = 0; // dependencies = NULL, has_stale_entries = false 136 137 static void init(); 138 139 int mark_dependent_nmethods(DepChange& changes); 140 void add_dependent_nmethod(nmethod* nm, bool expunge_stale_entries = false); 141 void remove_dependent_nmethod(nmethod* nm, bool expunge_stale_entries = false); 142 int remove_all_dependents(); 143 144 void expunge_stale_entries(); 145 146 // Unsafe deallocation of nmethodBuckets. Used in IK::release_C_heap_structures 147 // to clean up the context possibly containing live entries pointing to unloaded nmethods. 148 void wipe(); 149 150 #ifndef PRODUCT 151 void print_dependent_nmethods(bool verbose); 152 bool is_dependent_nmethod(nmethod* nm); 153 bool find_stale_entries(); 154 #endif //PRODUCT 155 }; 156 #endif // SHARE_VM_CODE_DEPENDENCYCONTEXT_HPP |