comparison src/share/vm/gc_interface/collectedHeap.inline.hpp @ 167:feeb96a45707

6696264: assert("narrow oop can never be zero") for GCBasher & ParNewGC Summary: decouple set_klass() with zeroing the gap when compressed. Reviewed-by: kvn, ysr, jrose
author coleenp
date Wed, 28 May 2008 21:06:24 -0700
parents ba764ed4b6f2
children d1605aabd0a1 6aae2f9d0294
comparison
equal deleted inserted replaced
166:aaa1137c5ef4 167:feeb96a45707
88 88
89 void CollectedHeap::post_allocation_setup_array(KlassHandle klass, 89 void CollectedHeap::post_allocation_setup_array(KlassHandle klass,
90 HeapWord* obj, 90 HeapWord* obj,
91 size_t size, 91 size_t size,
92 int length) { 92 int length) {
93 // Set array length before setting the _klass field
94 // in post_allocation_setup_common() because the klass field
95 // indicates that the object is parsable by concurrent GC.
93 assert(length >= 0, "length should be non-negative"); 96 assert(length >= 0, "length should be non-negative");
97 ((arrayOop)obj)->set_length(length);
94 post_allocation_setup_common(klass, obj, size); 98 post_allocation_setup_common(klass, obj, size);
95 // Must set length after installing klass as set_klass zeros the length
96 // field in UseCompressedOops
97 ((arrayOop)obj)->set_length(length);
98 assert(((oop)obj)->blueprint()->oop_is_array(), "must be an array"); 99 assert(((oop)obj)->blueprint()->oop_is_array(), "must be an array");
99 // notify jvmti and dtrace (must be after length is set for dtrace) 100 // notify jvmti and dtrace (must be after length is set for dtrace)
100 post_allocation_notify(klass, (oop)obj); 101 post_allocation_notify(klass, (oop)obj);
101 } 102 }
102 103
222 223
223 void CollectedHeap::init_obj(HeapWord* obj, size_t size) { 224 void CollectedHeap::init_obj(HeapWord* obj, size_t size) {
224 assert(obj != NULL, "cannot initialize NULL object"); 225 assert(obj != NULL, "cannot initialize NULL object");
225 const size_t hs = oopDesc::header_size(); 226 const size_t hs = oopDesc::header_size();
226 assert(size >= hs, "unexpected object size"); 227 assert(size >= hs, "unexpected object size");
228 ((oop)obj)->set_klass_gap(0);
227 Copy::fill_to_aligned_words(obj + hs, size - hs); 229 Copy::fill_to_aligned_words(obj + hs, size - hs);
228 } 230 }
229 231
230 oop CollectedHeap::obj_allocate(KlassHandle klass, int size, TRAPS) { 232 oop CollectedHeap::obj_allocate(KlassHandle klass, int size, TRAPS) {
231 debug_only(check_for_valid_allocation_state()); 233 debug_only(check_for_valid_allocation_state());