< prev index next >

src/share/vm/oops/instanceRefKlass.cpp

Print this page

        

*** 42,52 **** InstanceKlass* ik = InstanceKlass::cast(k); // Check that we have the right class debug_only(static bool first_time = true); assert(k == SystemDictionary::Reference_klass() && first_time, ! "Invalid update of maps"); debug_only(first_time = false); assert(ik->nonstatic_oop_map_count() == 1, "just checking"); OopMapBlock* map = ik->start_of_nonstatic_oop_maps(); --- 42,52 ---- InstanceKlass* ik = InstanceKlass::cast(k); // Check that we have the right class debug_only(static bool first_time = true); assert(k == SystemDictionary::Reference_klass() && first_time, ! "Invalid update of Reference maps"); debug_only(first_time = false); assert(ik->nonstatic_oop_map_count() == 1, "just checking"); OopMapBlock* map = ik->start_of_nonstatic_oop_maps();
*** 67,76 **** --- 67,105 ---- map->set_offset(java_lang_ref_Reference::queue_offset); map->set_count(1); } } + void InstanceRefKlass::update_nonstatic_ephemeron_oop_maps(Klass* k) { + // Clear the nonstatic oop-map entry corresponding to value field. + // It is treated specially by the garbage collector. + InstanceKlass* ik = InstanceKlass::cast(k); + + // Check that we have the right class + debug_only(static bool first_time = true); + assert(k == SystemDictionary::Ephemeron_klass() && first_time, + "Invalid update of Ephemeron maps"); + debug_only(first_time = false); + assert(ik->nonstatic_oop_map_count() == 2, "just checking"); + + // skip 1st map as it's the copy of the augmented Reference's map + OopMapBlock* map = ik->start_of_nonstatic_oop_maps() + 1; + + debug_only(int offset = java_lang_ref_Ephemeron::value_offset); + + if (UseSharedSpaces) { + assert(map->offset() == offset && map->count() == 0, + "just checking"); + } else { + assert(map->offset() == offset && map->count() == 1, + "just checking"); + + // Update map to have 0 oops. + map->set_count(0); + } + } + // Verification void InstanceRefKlass::oop_verify_on(oop obj, outputStream* st) { InstanceKlass::oop_verify_on(obj, st);
< prev index next >