Mercurial > hg > truffle
diff 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 |
line wrap: on
line diff
--- a/src/share/vm/gc_interface/collectedHeap.inline.hpp Wed May 28 12:42:34 2008 -0700 +++ b/src/share/vm/gc_interface/collectedHeap.inline.hpp Wed May 28 21:06:24 2008 -0700 @@ -90,11 +90,12 @@ HeapWord* obj, size_t size, int length) { + // Set array length before setting the _klass field + // in post_allocation_setup_common() because the klass field + // indicates that the object is parsable by concurrent GC. assert(length >= 0, "length should be non-negative"); + ((arrayOop)obj)->set_length(length); post_allocation_setup_common(klass, obj, size); - // Must set length after installing klass as set_klass zeros the length - // field in UseCompressedOops - ((arrayOop)obj)->set_length(length); assert(((oop)obj)->blueprint()->oop_is_array(), "must be an array"); // notify jvmti and dtrace (must be after length is set for dtrace) post_allocation_notify(klass, (oop)obj); @@ -224,6 +225,7 @@ assert(obj != NULL, "cannot initialize NULL object"); const size_t hs = oopDesc::header_size(); assert(size >= hs, "unexpected object size"); + ((oop)obj)->set_klass_gap(0); Copy::fill_to_aligned_words(obj + hs, size - hs); }