src/share/vm/memory/genOopClosures.inline.hpp

changeset 1280
df6caf649ff7
parent 791
1ee8caae33af
child 1907
c18cbe5936b8
equal deleted inserted replaced
1274:bb18957ad21e 1280:df6caf649ff7
38 } 38 }
39 } 39 }
40 40
41 template <class T> inline void OopsInGenClosure::do_barrier(T* p) { 41 template <class T> inline void OopsInGenClosure::do_barrier(T* p) {
42 assert(generation()->is_in_reserved(p), "expected ref in generation"); 42 assert(generation()->is_in_reserved(p), "expected ref in generation");
43 assert(!oopDesc::is_null(*p), "expected non-null object"); 43 T heap_oop = oopDesc::load_heap_oop(p);
44 oop obj = oopDesc::load_decode_heap_oop_not_null(p); 44 assert(!oopDesc::is_null(heap_oop), "expected non-null oop");
45 oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
45 // If p points to a younger generation, mark the card. 46 // If p points to a younger generation, mark the card.
46 if ((HeapWord*)obj < _gen_boundary) { 47 if ((HeapWord*)obj < _gen_boundary) {
47 _rs->inline_write_ref_field_gc(p, obj); 48 _rs->inline_write_ref_field_gc(p, obj);
48 } 49 }
49 } 50 }
50 51
51 inline void OopsInGenClosure::par_do_barrier(oop* p) { 52 template <class T> inline void OopsInGenClosure::par_do_barrier(T* p) {
52 assert(generation()->is_in_reserved(p), "expected ref in generation"); 53 assert(generation()->is_in_reserved(p), "expected ref in generation");
53 oop obj = *p; 54 T heap_oop = oopDesc::load_heap_oop(p);
54 assert(obj != NULL, "expected non-null object"); 55 assert(!oopDesc::is_null(heap_oop), "expected non-null oop");
56 oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
55 // If p points to a younger generation, mark the card. 57 // If p points to a younger generation, mark the card.
56 if ((HeapWord*)obj < gen_boundary()) { 58 if ((HeapWord*)obj < gen_boundary()) {
57 rs()->write_ref_field_gc_par(p, obj); 59 rs()->write_ref_field_gc_par(p, obj);
58 } 60 }
59 } 61 }

mercurial