comparison src/share/vm/memory/barrierSet.cpp @ 2324:0ac769a57c64

6627983: G1: Bad oop deference during marking Summary: Bulk zeroing reduction didn't work with G1, because arraycopy would call pre-barriers on uninitialized oops. The solution is to have version of arraycopy stubs that don't have pre-barriers. Also refactored arraycopy stubs generation on SPARC to be more readable and reduced the number of stubs necessary in some cases. Reviewed-by: jrose, kvn, never
author iveresov
date Tue, 01 Mar 2011 14:56:48 -0800
parents f95d63e2154a
children 1d1603768966
comparison
equal deleted inserted replaced
2323:bc6b27fb3568 2324:0ac769a57c64
33 #if 0 33 #if 0
34 warning("Pre: \t" INTPTR_FORMAT "[" SIZE_FORMAT "]\t", 34 warning("Pre: \t" INTPTR_FORMAT "[" SIZE_FORMAT "]\t",
35 start, count); 35 start, count);
36 #endif 36 #endif
37 if (UseCompressedOops) { 37 if (UseCompressedOops) {
38 Universe::heap()->barrier_set()->write_ref_array_pre((narrowOop*)start, (int)count); 38 Universe::heap()->barrier_set()->write_ref_array_pre((narrowOop*)start, (int)count, false);
39 } else { 39 } else {
40 Universe::heap()->barrier_set()->write_ref_array_pre( (oop*)start, (int)count); 40 Universe::heap()->barrier_set()->write_ref_array_pre( (oop*)start, (int)count, false);
41 } 41 }
42 } 42 }
43 43
44 // count is number of array elements being written 44 // count is number of array elements being written
45 void BarrierSet::static_write_ref_array_post(HeapWord* start, size_t count) { 45 void BarrierSet::static_write_ref_array_post(HeapWord* start, size_t count) {