Mercurial > hg > graal-jvmci-8
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. |