6627983: G1: Bad oop deference during marking

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
This commit is contained in:
Igor Veresov 2011-03-01 14:56:48 -08:00
parent 5432554ecb
commit 90a153aa38
10 changed files with 353 additions and 205 deletions

View file

@ -35,9 +35,9 @@ void BarrierSet::static_write_ref_array_pre(HeapWord* start, size_t count) {
start, count);
#endif
if (UseCompressedOops) {
Universe::heap()->barrier_set()->write_ref_array_pre((narrowOop*)start, (int)count);
Universe::heap()->barrier_set()->write_ref_array_pre((narrowOop*)start, (int)count, false);
} else {
Universe::heap()->barrier_set()->write_ref_array_pre( (oop*)start, (int)count);
Universe::heap()->barrier_set()->write_ref_array_pre( (oop*)start, (int)count, false);
}
}