Mercurial > hg > graal-compiler
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; |