comparison src/share/vm/opto/graphKit.cpp @ 1166:7b0e9cba0307

6896647: card marks can be deferred too long Summary: Deferred card marks are now flushed during the gc prologue. Parallel[Scavege,OldGC] and SerialGC no longer defer card marks generated by COMPILER2 as a result of ReduceInitialCardMarks. For these cases, introduced a diagnostic option to defer the card marks, only for the purposes of testing and diagnostics. CMS and G1 continue to defer card marks. Potential performance concern related to single-threaded flushing of deferred card marks in the gc prologue will be addressed in the future. Reviewed-by: never, johnc
author ysr
date Wed, 13 Jan 2010 15:26:39 -0800
parents 97125851f396
children 6deeaebad47a f516d5d7a019
comparison
equal deleted inserted replaced
1165:2dd52dea6d28 1166:7b0e9cba0307
3257 } 3257 }
3258 3258
3259 if (use_ReduceInitialCardMarks() 3259 if (use_ReduceInitialCardMarks()
3260 && obj == just_allocated_object(control())) { 3260 && obj == just_allocated_object(control())) {
3261 // We can skip marks on a freshly-allocated object in Eden. 3261 // We can skip marks on a freshly-allocated object in Eden.
3262 // Keep this code in sync with maybe_defer_card_mark() in runtime.cpp. 3262 // Keep this code in sync with new_store_pre_barrier() in runtime.cpp.
3263 // That routine informs GC to take appropriate compensating steps 3263 // That routine informs GC to take appropriate compensating steps,
3264 // so as to make this card-mark elision safe. 3264 // upon a slow-path allocation, so as to make this card-mark
3265 // elision safe.
3265 return; 3266 return;
3266 } 3267 }
3267 3268
3268 if (!use_precise) { 3269 if (!use_precise) {
3269 // All card marks for a (non-array) instance are in one place: 3270 // All card marks for a (non-array) instance are in one place: