comparison src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp @ 18041:52b4284cb496

Merge with jdk8u20-b26
author Gilles Duboscq <duboscq@ssw.jku.at>
date Wed, 15 Oct 2014 16:02:50 +0200
parents 4ca6dc0799b6 6a0ad2977919
children 7848fc12602b
comparison
equal deleted inserted replaced
17606:45d7b2c7029d 18041:52b4284cb496
93 93
94 void G1SATBCardTableModRefBS::g1_mark_as_young(const MemRegion& mr) { 94 void G1SATBCardTableModRefBS::g1_mark_as_young(const MemRegion& mr) {
95 jbyte *const first = byte_for(mr.start()); 95 jbyte *const first = byte_for(mr.start());
96 jbyte *const last = byte_after(mr.last()); 96 jbyte *const last = byte_after(mr.last());
97 97
98 memset(first, g1_young_gen, last - first); 98 // Below we may use an explicit loop instead of memset() because on
99 // certain platforms memset() can give concurrent readers phantom zeros.
100 if (UseMemSetInBOT) {
101 memset(first, g1_young_gen, last - first);
102 } else {
103 for (jbyte* i = first; i < last; i++) {
104 *i = g1_young_gen;
105 }
106 }
99 } 107 }
100 108
101 #ifndef PRODUCT 109 #ifndef PRODUCT
102 void G1SATBCardTableModRefBS::verify_g1_young_region(MemRegion mr) { 110 void G1SATBCardTableModRefBS::verify_g1_young_region(MemRegion mr) {
103 verify_region(mr, g1_young_gen, true); 111 verify_region(mr, g1_young_gen, true);
113 _kind = G1SATBCTLogging; 121 _kind = G1SATBCTLogging;
114 } 122 }
115 123
116 void 124 void
117 G1SATBCardTableLoggingModRefBS::write_ref_field_work(void* field, 125 G1SATBCardTableLoggingModRefBS::write_ref_field_work(void* field,
118 oop new_val) { 126 oop new_val,
127 bool release) {
119 volatile jbyte* byte = byte_for(field); 128 volatile jbyte* byte = byte_for(field);
120 if (*byte == g1_young_gen) { 129 if (*byte == g1_young_gen) {
121 return; 130 return;
122 } 131 }
123 OrderAccess::storeload(); 132 OrderAccess::storeload();