comparison src/share/vm/oops/constantPoolKlass.cpp @ 2226:c5a923563727

6912621: iCMS: Error: assert(_markBitMap.isMarked(addr + 1),"Missing Printezis bit?") Summary: Fix block_size_if_printezis_bits() so it does not expect the bits, only uses them when available. Fix block_size_no_stall() so it does not stall when the bits are missing such cases, letting the caller deal with zero size returns. Constant pool cache oops do not need to be unparsable or conc_unsafe after their klass pointer is installed. Some cosmetic clean-ups and some assertion checking for conc-usafety which, in the presence of class file redefinition, has no a-priori time boundedness, so all GCs must be able to safely deal with putatively conc-unsafe objects in a stop-world pause. Reviewed-by: jmasa, johnc
author ysr
date Mon, 07 Feb 2011 22:19:57 -0800
parents 3582bf76420e
children e5383553fd4e
comparison
equal deleted inserted replaced
2225:c798c277ddd1 2226:c5a923563727
69 // if constant pool may change during RedefineClasses, it is created 69 // if constant pool may change during RedefineClasses, it is created
70 // unsafe for GC concurrent processing. 70 // unsafe for GC concurrent processing.
71 c->set_is_conc_safe(is_conc_safe); 71 c->set_is_conc_safe(is_conc_safe);
72 // all fields are initialized; needed for GC 72 // all fields are initialized; needed for GC
73 73
74 // Note: because we may be in this "conc_unsafe" state when allocating
75 // t_oop below, which may in turn cause a GC, it is imperative that our
76 // size be correct, consistent and henceforth stable, at this stage.
77 assert(c->is_parsable(), "Else size() below is unreliable");
78 DEBUG_ONLY(int sz = c->size();)
79
74 // initialize tag array 80 // initialize tag array
75 // Note: cannot introduce constant pool handle before since it is not 81 // Note: cannot introduce constant pool handle before since it is not
76 // completely initialized (no class) -> would cause assertion failure 82 // completely initialized (no class) -> would cause assertion failure
77 constantPoolHandle pool (THREAD, c); 83 constantPoolHandle pool (THREAD, c);
78 typeArrayOop t_oop = oopFactory::new_permanent_byteArray(length, CHECK_NULL); 84 typeArrayOop t_oop = oopFactory::new_permanent_byteArray(length, CHECK_NULL);
80 for (int index = 0; index < length; index++) { 86 for (int index = 0; index < length; index++) {
81 tags()->byte_at_put(index, JVM_CONSTANT_Invalid); 87 tags()->byte_at_put(index, JVM_CONSTANT_Invalid);
82 } 88 }
83 pool->set_tags(tags()); 89 pool->set_tags(tags());
84 90
91 // Check that our size was stable at its old value.
92 assert(sz == c->size(), "size() changed");
85 return pool(); 93 return pool();
86 } 94 }
87 95
88 klassOop constantPoolKlass::create_klass(TRAPS) { 96 klassOop constantPoolKlass::create_klass(TRAPS) {
89 constantPoolKlass o; 97 constantPoolKlass o;