Mercurial > hg > graal-compiler
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) { |