< prev index next >

src/share/vm/oops/klass.cpp

Print this page
rev 12310 : [mq]: gcinterface.patch


 443 
 444 void Klass::klass_update_barrier_set(oop v) {
 445   record_modified_oops();
 446 }
 447 
 448 // This barrier is used by G1 to remember the old oop values, so
 449 // that we don't forget any objects that were live at the snapshot at
 450 // the beginning. This function is only used when we write oops into Klasses.
 451 void Klass::klass_update_barrier_set_pre(oop* p, oop v) {
 452 #if INCLUDE_ALL_GCS
 453   if (UseG1GC) {
 454     oop obj = *p;
 455     if (obj != NULL) {
 456       G1SATBCardTableModRefBS::enqueue(obj);
 457     }
 458   }
 459 #endif
 460 }
 461 
 462 void Klass::klass_oop_store(oop* p, oop v) {
 463   assert(!Universe::heap()->is_in_reserved((void*)p), "Should store pointer into metadata");
 464   assert(v == NULL || Universe::heap()->is_in_reserved((void*)v), "Should store pointer to an object");
 465 
 466   // do the store
 467   if (always_do_update_barrier) {
 468     klass_oop_store((volatile oop*)p, v);
 469   } else {
 470     klass_update_barrier_set_pre(p, v);
 471     *p = v;
 472     klass_update_barrier_set(v);
 473   }
 474 }
 475 
 476 void Klass::klass_oop_store(volatile oop* p, oop v) {
 477   assert(!Universe::heap()->is_in_reserved((void*)p), "Should store pointer into metadata");
 478   assert(v == NULL || Universe::heap()->is_in_reserved((void*)v), "Should store pointer to an object");
 479 
 480   klass_update_barrier_set_pre((oop*)p, v); // Cast away volatile.
 481   OrderAccess::release_store_ptr(p, v);
 482   klass_update_barrier_set(v);
 483 }
 484 
 485 void Klass::oops_do(OopClosure* cl) {
 486   cl->do_oop(&_java_mirror);
 487 }
 488 
 489 void Klass::remove_unshareable_info() {
 490   assert (DumpSharedSpaces, "only called for DumpSharedSpaces");
 491   TRACE_REMOVE_KLASS_ID(this);
 492 
 493   set_subklass(NULL);
 494   set_next_sibling(NULL);
 495   // Clear the java mirror
 496   set_java_mirror(NULL);
 497   set_next_link(NULL);
 498 




 443 
 444 void Klass::klass_update_barrier_set(oop v) {
 445   record_modified_oops();
 446 }
 447 
 448 // This barrier is used by G1 to remember the old oop values, so
 449 // that we don't forget any objects that were live at the snapshot at
 450 // the beginning. This function is only used when we write oops into Klasses.
 451 void Klass::klass_update_barrier_set_pre(oop* p, oop v) {
 452 #if INCLUDE_ALL_GCS
 453   if (UseG1GC) {
 454     oop obj = *p;
 455     if (obj != NULL) {
 456       G1SATBCardTableModRefBS::enqueue(obj);
 457     }
 458   }
 459 #endif
 460 }
 461 
 462 void Klass::klass_oop_store(oop* p, oop v) {
 463   assert(!GC::gc()->heap()->is_in_reserved((void*)p), "Should store pointer into metadata");
 464   assert(v == NULL || GC::gc()->heap()->is_in_reserved((void*)v), "Should store pointer to an object");
 465 
 466   // do the store
 467   if (always_do_update_barrier) {
 468     klass_oop_store((volatile oop*)p, v);
 469   } else {
 470     klass_update_barrier_set_pre(p, v);
 471     *p = v;
 472     klass_update_barrier_set(v);
 473   }
 474 }
 475 
 476 void Klass::klass_oop_store(volatile oop* p, oop v) {
 477   assert(!GC::gc()->heap()->is_in_reserved((void*)p), "Should store pointer into metadata");
 478   assert(v == NULL || GC::gc()->heap()->is_in_reserved((void*)v), "Should store pointer to an object");
 479 
 480   klass_update_barrier_set_pre((oop*)p, v); // Cast away volatile.
 481   OrderAccess::release_store_ptr(p, v);
 482   klass_update_barrier_set(v);
 483 }
 484 
 485 void Klass::oops_do(OopClosure* cl) {
 486   cl->do_oop(&_java_mirror);
 487 }
 488 
 489 void Klass::remove_unshareable_info() {
 490   assert (DumpSharedSpaces, "only called for DumpSharedSpaces");
 491   TRACE_REMOVE_KLASS_ID(this);
 492 
 493   set_subklass(NULL);
 494   set_next_sibling(NULL);
 495   // Clear the java mirror
 496   set_java_mirror(NULL);
 497   set_next_link(NULL);
 498 


< prev index next >