comparison src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.hpp @ 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 e1162778c1c8
comparison
equal deleted inserted replaced
2323:bc6b27fb3568 2324:0ac769a57c64
81 virtual void write_ref_field_pre_work(void* field, oop new_val) { 81 virtual void write_ref_field_pre_work(void* field, oop new_val) {
82 guarantee(false, "Not needed"); 82 guarantee(false, "Not needed");
83 } 83 }
84 84
85 template <class T> void write_ref_array_pre_work(T* dst, int count); 85 template <class T> void write_ref_array_pre_work(T* dst, int count);
86 virtual void write_ref_array_pre(oop* dst, int count) { 86 virtual void write_ref_array_pre(oop* dst, int count, bool dest_uninitialized) {
87 write_ref_array_pre_work(dst, count); 87 if (!dest_uninitialized) {
88 write_ref_array_pre_work(dst, count);
89 }
88 } 90 }
89 virtual void write_ref_array_pre(narrowOop* dst, int count) { 91 virtual void write_ref_array_pre(narrowOop* dst, int count, bool dest_uninitialized) {
90 write_ref_array_pre_work(dst, count); 92 if (!dest_uninitialized) {
93 write_ref_array_pre_work(dst, count);
94 }
91 } 95 }
92 }; 96 };
93 97
94 // Adds card-table logging to the post-barrier. 98 // Adds card-table logging to the post-barrier.
95 // Usual invariant: all dirty cards are logged in the DirtyCardQueueSet. 99 // Usual invariant: all dirty cards are logged in the DirtyCardQueueSet.