src/share/vm/oops/objArrayKlassKlass.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/oops/objArrayKlassKlass.cpp	Fri Mar 18 14:59:29 2011
--- new/src/share/vm/oops/objArrayKlassKlass.cpp	Fri Mar 18 14:59:29 2011

*** 29,38 **** --- 29,45 ---- #include "gc_interface/collectedHeap.inline.hpp" #include "oops/instanceKlass.hpp" #include "oops/objArrayKlassKlass.hpp" #include "oops/oop.inline.hpp" #include "oops/oop.inline2.hpp" + #ifndef SERIALGC + #include "gc_implementation/parNew/parOopClosures.inline.hpp" + #include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" + #include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" + #include "memory/cardTableRS.hpp" + #include "oops/oop.pcgc.inline.hpp" + #endif klassOop objArrayKlassKlass::create_klass(TRAPS) { objArrayKlassKlass o; KlassHandle h_this_klass(THREAD, Universe::klassKlassObj()); KlassHandle k = base_create_klass(h_this_klass, header_size(), o.vtbl_value(), CHECK_0);
*** 234,249 **** --- 241,267 ---- addr = oak->element_klass_addr(); if (mr.contains(addr)) blk->do_oop(addr); addr = oak->bottom_klass_addr(); if (mr.contains(addr)) blk->do_oop(addr); ! return arrayKlassKlass::oop_oop_iterate_m(obj, blk, mr); } #ifndef SERIALGC void objArrayKlassKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { assert(obj->blueprint()->oop_is_objArrayKlass(),"must be an obj array klass"); + objArrayKlass* oak = objArrayKlass::cast((klassOop)obj); + oop* p = oak->element_klass_addr(); + if (PSScavenge::should_scavenge(p)) { + pm->claim_or_forward_depth(p); + } + p = oak->bottom_klass_addr(); + if (PSScavenge::should_scavenge(p)) { + pm->claim_or_forward_depth(p); + } + + arrayKlassKlass::oop_push_contents(pm, obj); } int objArrayKlassKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { assert(obj->is_klass(), "must be klass"); assert(klassOop(obj)->klass_part()->oop_is_objArray_slow(), "must be obj array");
*** 285,295 **** --- 303,313 ---- // Verification void objArrayKlassKlass::oop_verify_on(oop obj, outputStream* st) { ! klassKlass::oop_verify_on(obj, st); ! arrayKlassKlass::oop_verify_on(obj, st); objArrayKlass* oak = objArrayKlass::cast((klassOop)obj); guarantee(oak->element_klass()->is_perm(), "should be in permspace"); guarantee(oak->element_klass()->is_klass(), "should be klass"); guarantee(oak->bottom_klass()->is_perm(), "should be in permspace"); guarantee(oak->bottom_klass()->is_klass(), "should be klass");

src/share/vm/oops/objArrayKlassKlass.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File