hotspot/src/share/vm/oops/instanceKlassKlass.cpp
changeset 360 21d113ecbf6a
parent 1 489c9b5090e2
child 591 04d2e26e6d69
equal deleted inserted replaced
357:f4edb0d9f109 360:21d113ecbf6a
   284   assert(!pm->depth_first(), "invariant");
   284   assert(!pm->depth_first(), "invariant");
   285   instanceKlass* ik = instanceKlass::cast(klassOop(obj));
   285   instanceKlass* ik = instanceKlass::cast(klassOop(obj));
   286   ik->copy_static_fields(pm);
   286   ik->copy_static_fields(pm);
   287 
   287 
   288   oop* loader_addr = ik->adr_class_loader();
   288   oop* loader_addr = ik->adr_class_loader();
   289   if (PSScavenge::should_scavenge(*loader_addr)) {
   289   if (PSScavenge::should_scavenge(loader_addr)) {
   290     pm->claim_or_forward_breadth(loader_addr);
   290     pm->claim_or_forward_breadth(loader_addr);
   291   }
   291   }
   292 
   292 
   293   oop* pd_addr = ik->adr_protection_domain();
   293   oop* pd_addr = ik->adr_protection_domain();
   294   if (PSScavenge::should_scavenge(*pd_addr)) {
   294   if (PSScavenge::should_scavenge(pd_addr)) {
   295     pm->claim_or_forward_breadth(pd_addr);
   295     pm->claim_or_forward_breadth(pd_addr);
   296   }
   296   }
   297 
   297 
   298   oop* sg_addr = ik->adr_signers();
   298   oop* sg_addr = ik->adr_signers();
   299   if (PSScavenge::should_scavenge(*sg_addr)) {
   299   if (PSScavenge::should_scavenge(sg_addr)) {
   300     pm->claim_or_forward_breadth(sg_addr);
   300     pm->claim_or_forward_breadth(sg_addr);
   301   }
   301   }
   302 
   302 
   303   klassKlass::oop_copy_contents(pm, obj);
   303   klassKlass::oop_copy_contents(pm, obj);
   304 }
   304 }
   307   assert(pm->depth_first(), "invariant");
   307   assert(pm->depth_first(), "invariant");
   308   instanceKlass* ik = instanceKlass::cast(klassOop(obj));
   308   instanceKlass* ik = instanceKlass::cast(klassOop(obj));
   309   ik->push_static_fields(pm);
   309   ik->push_static_fields(pm);
   310 
   310 
   311   oop* loader_addr = ik->adr_class_loader();
   311   oop* loader_addr = ik->adr_class_loader();
   312   if (PSScavenge::should_scavenge(*loader_addr)) {
   312   if (PSScavenge::should_scavenge(loader_addr)) {
   313     pm->claim_or_forward_depth(loader_addr);
   313     pm->claim_or_forward_depth(loader_addr);
   314   }
   314   }
   315 
   315 
   316   oop* pd_addr = ik->adr_protection_domain();
   316   oop* pd_addr = ik->adr_protection_domain();
   317   if (PSScavenge::should_scavenge(*pd_addr)) {
   317   if (PSScavenge::should_scavenge(pd_addr)) {
   318     pm->claim_or_forward_depth(pd_addr);
   318     pm->claim_or_forward_depth(pd_addr);
   319   }
   319   }
   320 
   320 
   321   oop* sg_addr = ik->adr_signers();
   321   oop* sg_addr = ik->adr_signers();
   322   if (PSScavenge::should_scavenge(*sg_addr)) {
   322   if (PSScavenge::should_scavenge(sg_addr)) {
   323     pm->claim_or_forward_depth(sg_addr);
   323     pm->claim_or_forward_depth(sg_addr);
   324   }
   324   }
   325 
   325 
   326   klassKlass::oop_copy_contents(pm, obj);
   326   klassKlass::oop_copy_contents(pm, obj);
   327 }
   327 }
   600   return "{instance class}";
   600   return "{instance class}";
   601 }
   601 }
   602 
   602 
   603 // Verification
   603 // Verification
   604 
   604 
   605 
       
   606 class VerifyFieldClosure: public OopClosure {
   605 class VerifyFieldClosure: public OopClosure {
       
   606  protected:
       
   607   template <class T> void do_oop_work(T* p) {
       
   608     guarantee(Universe::heap()->is_in(p), "should be in heap");
       
   609     oop obj = oopDesc::load_decode_heap_oop(p);
       
   610     guarantee(obj->is_oop_or_null(), "should be in heap");
       
   611   }
   607  public:
   612  public:
   608   void do_oop(oop* p) {
   613   virtual void do_oop(oop* p)       { VerifyFieldClosure::do_oop_work(p); }
   609     guarantee(Universe::heap()->is_in(p), "should be in heap");
   614   virtual void do_oop(narrowOop* p) { VerifyFieldClosure::do_oop_work(p); }
   610     guarantee((*p)->is_oop_or_null(), "should be in heap");
       
   611   }
       
   612 };
   615 };
   613 
       
   614 
   616 
   615 void instanceKlassKlass::oop_verify_on(oop obj, outputStream* st) {
   617 void instanceKlassKlass::oop_verify_on(oop obj, outputStream* st) {
   616   klassKlass::oop_verify_on(obj, st);
   618   klassKlass::oop_verify_on(obj, st);
   617   if (!obj->partially_loaded()) {
   619   if (!obj->partially_loaded()) {
   618     Thread *thread = Thread::current();
   620     Thread *thread = Thread::current();