1.1 --- a/src/share/vm/oops/klassKlass.cpp Fri Mar 18 15:52:42 2011 -0700 1.2 +++ b/src/share/vm/oops/klassKlass.cpp Fri Mar 18 16:00:34 2011 -0700 1.3 @@ -41,6 +41,10 @@ 1.4 #include "oops/typeArrayKlass.hpp" 1.5 #include "runtime/handles.inline.hpp" 1.6 #ifndef SERIALGC 1.7 +#include "gc_implementation/parNew/parOopClosures.inline.hpp" 1.8 +#include "gc_implementation/parallelScavenge/psPromotionManager.inline.hpp" 1.9 +#include "gc_implementation/parallelScavenge/psScavenge.inline.hpp" 1.10 +#include "memory/cardTableRS.hpp" 1.11 #include "oops/oop.pcgc.inline.hpp" 1.12 #endif 1.13 1.14 @@ -175,6 +179,12 @@ 1.15 1.16 #ifndef SERIALGC 1.17 void klassKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { 1.18 + Klass* k = Klass::cast(klassOop(obj)); 1.19 + 1.20 + oop* p = k->adr_java_mirror(); 1.21 + if (PSScavenge::should_scavenge(p)) { 1.22 + pm->claim_or_forward_depth(p); 1.23 + } 1.24 } 1.25 1.26 int klassKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { 1.27 @@ -233,7 +243,7 @@ 1.28 1.29 if (k->java_mirror() != NULL || (k->oop_is_instance() && instanceKlass::cast(klassOop(obj))->is_loaded())) { 1.30 guarantee(k->java_mirror() != NULL, "should be allocated"); 1.31 - guarantee(k->java_mirror()->is_perm(), "should be in permspace"); 1.32 + guarantee(k->java_mirror()->is_perm() || !JavaObjectsInPerm, "should be in permspace"); 1.33 guarantee(k->java_mirror()->is_instance(), "should be instance"); 1.34 } 1.35 }