Mercurial > hg > graal-jvmci-8
comparison src/share/vm/memory/sharedHeap.hpp @ 989:148e5441d916
6863023: need non-perm oops in code cache for JSR 292
Summary: Make a special root-list for those few nmethods which might contain non-perm oops.
Reviewed-by: twisti, kvn, never, jmasa, ysr
author | jrose |
---|---|
date | Tue, 15 Sep 2009 21:53:47 -0700 |
parents | 0fbdb4381b99 |
children | 3fc996d4edd2 |
comparison
equal
deleted
inserted
replaced
987:00977607da34 | 989:148e5441d916 |
---|---|
163 // a) to return a different value than was returned before the last | 163 // a) to return a different value than was returned before the last |
164 // call to change_strong_roots_parity, and | 164 // call to change_strong_roots_parity, and |
165 // c) to never return a distinguished value (zero) with which such | 165 // c) to never return a distinguished value (zero) with which such |
166 // task-claiming variables may be initialized, to indicate "never | 166 // task-claiming variables may be initialized, to indicate "never |
167 // claimed". | 167 // claimed". |
168 private: | |
168 void change_strong_roots_parity(); | 169 void change_strong_roots_parity(); |
170 public: | |
169 int strong_roots_parity() { return _strong_roots_parity; } | 171 int strong_roots_parity() { return _strong_roots_parity; } |
172 | |
173 // Call these in sequential code around process_strong_roots. | |
174 // strong_roots_prologue calls change_strong_roots_parity, if | |
175 // parallel tasks are enabled. | |
176 class StrongRootsScope : public MarkingCodeBlobClosure::MarkScope { | |
177 public: | |
178 StrongRootsScope(SharedHeap* outer, bool activate = true); | |
179 ~StrongRootsScope(); | |
180 }; | |
181 friend class StrongRootsScope; | |
170 | 182 |
171 enum ScanningOption { | 183 enum ScanningOption { |
172 SO_None = 0x0, | 184 SO_None = 0x0, |
173 SO_AllClasses = 0x1, | 185 SO_AllClasses = 0x1, |
174 SO_SystemClasses = 0x2, | 186 SO_SystemClasses = 0x2, |
196 // "SO_AllClasses" applies the closure to all entries in the SystemDictionary; | 208 // "SO_AllClasses" applies the closure to all entries in the SystemDictionary; |
197 // "SO_SystemClasses" to all the "system" classes and loaders; | 209 // "SO_SystemClasses" to all the "system" classes and loaders; |
198 // "SO_Symbols" applies the closure to all entries in SymbolsTable; | 210 // "SO_Symbols" applies the closure to all entries in SymbolsTable; |
199 // "SO_Strings" applies the closure to all entries in StringTable; | 211 // "SO_Strings" applies the closure to all entries in StringTable; |
200 // "SO_CodeCache" applies the closure to all elements of the CodeCache. | 212 // "SO_CodeCache" applies the closure to all elements of the CodeCache. |
201 void process_strong_roots(bool collecting_perm_gen, | 213 void process_strong_roots(bool activate_scope, |
214 bool collecting_perm_gen, | |
202 ScanningOption so, | 215 ScanningOption so, |
203 OopClosure* roots, | 216 OopClosure* roots, |
217 CodeBlobClosure* code_roots, | |
204 OopsInGenClosure* perm_blk); | 218 OopsInGenClosure* perm_blk); |
205 | 219 |
206 // Apply "blk" to all the weak roots of the system. These include | 220 // Apply "blk" to all the weak roots of the system. These include |
207 // JNI weak roots, the code cache, system dictionary, symbol table, | 221 // JNI weak roots, the code cache, system dictionary, symbol table, |
208 // string table. | 222 // string table. |
209 void process_weak_roots(OopClosure* root_closure, | 223 void process_weak_roots(OopClosure* root_closure, |
224 CodeBlobClosure* code_roots, | |
210 OopClosure* non_root_closure); | 225 OopClosure* non_root_closure); |
211 | 226 |
212 | 227 |
213 // Like CollectedHeap::collect, but assume that the caller holds the Heap_lock. | 228 // Like CollectedHeap::collect, but assume that the caller holds the Heap_lock. |
214 virtual void collect_locked(GCCause::Cause cause) = 0; | 229 virtual void collect_locked(GCCause::Cause cause) = 0; |