< prev index next >

src/share/vm/oops/klass.cpp

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


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




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


< prev index next >