comparison src/share/vm/memory/sharedHeap.hpp @ 3293:1f4413413144

7039089: G1: changeset for 7037276 broke heap verification, and related cleanups Summary: In G1 heap verification, we no longer scan perm to G1-collected heap refs as part of process_strong_roots() but rather in a separate explicit oop iteration over the perm gen. This preserves the original perm card-marks. Added a new assertion in younger_refs_iterate() to catch a simple subcase where the user may have forgotten a prior save_marks() call, as happened in the case of G1's attempt to iterate perm to G1 refs when verifying the heap before exit. The assert was deliberately weakened for ParNew+CMS and will be fixed for that combination in a future CR. Also made some (non-G1) cleanups related to code and comments obsoleted by the migration of Symbols to the native heap. Reviewed-by: iveresov, jmasa, tonyp
author ysr
date Tue, 26 Apr 2011 21:17:24 -0700
parents f95d63e2154a
children bca17e38de00
comparison
equal deleted inserted replaced
3292:c303b3532d4a 3293:1f4413413144
190 190
191 enum ScanningOption { 191 enum ScanningOption {
192 SO_None = 0x0, 192 SO_None = 0x0,
193 SO_AllClasses = 0x1, 193 SO_AllClasses = 0x1,
194 SO_SystemClasses = 0x2, 194 SO_SystemClasses = 0x2,
195 SO_Symbols = 0x4, 195 SO_Strings = 0x4,
196 SO_Strings = 0x8, 196 SO_CodeCache = 0x8
197 SO_CodeCache = 0x10
198 }; 197 };
199 198
200 FlexibleWorkGang* workers() const { return _workers; } 199 FlexibleWorkGang* workers() const { return _workers; }
201 200
202 // Sets the number of parallel threads that will be doing tasks 201 // Sets the number of parallel threads that will be doing tasks
206 // Number of threads currently working on GC tasks. 205 // Number of threads currently working on GC tasks.
207 int n_par_threads() { return _n_par_threads; } 206 int n_par_threads() { return _n_par_threads; }
208 207
209 // Invoke the "do_oop" method the closure "roots" on all root locations. 208 // Invoke the "do_oop" method the closure "roots" on all root locations.
210 // If "collecting_perm_gen" is false, then roots that may only contain 209 // If "collecting_perm_gen" is false, then roots that may only contain
211 // references to permGen objects are not scanned. If true, the 210 // references to permGen objects are not scanned; instead, in that case,
212 // "perm_gen" closure is applied to all older-to-younger refs in the 211 // the "perm_blk" closure is applied to all outgoing refs in the
213 // permanent generation. The "so" argument determines which of roots 212 // permanent generation. The "so" argument determines which of roots
214 // the closure is applied to: 213 // the closure is applied to:
215 // "SO_None" does none; 214 // "SO_None" does none;
216 // "SO_AllClasses" applies the closure to all entries in the SystemDictionary; 215 // "SO_AllClasses" applies the closure to all entries in the SystemDictionary;
217 // "SO_SystemClasses" to all the "system" classes and loaders; 216 // "SO_SystemClasses" to all the "system" classes and loaders;
218 // "SO_Symbols" applies the closure to all entries in SymbolsTable;
219 // "SO_Strings" applies the closure to all entries in StringTable; 217 // "SO_Strings" applies the closure to all entries in StringTable;
220 // "SO_CodeCache" applies the closure to all elements of the CodeCache. 218 // "SO_CodeCache" applies the closure to all elements of the CodeCache.
221 void process_strong_roots(bool activate_scope, 219 void process_strong_roots(bool activate_scope,
222 bool collecting_perm_gen, 220 bool collecting_perm_gen,
223 ScanningOption so, 221 ScanningOption so,