< prev index next >

src/share/vm/gc_implementation/g1/g1CodeCacheRemSet.cpp

Print this page




 188         remove_entry(e, previous);
 189         ++num_removed;
 190       } else {
 191         previous = e;
 192       }
 193       e = next;
 194     }
 195   }
 196   return num_removed;
 197 }
 198 
 199 G1CodeRootSet::~G1CodeRootSet() {
 200   delete _table;
 201 }
 202 
 203 CodeRootSetTable* G1CodeRootSet::load_acquire_table() {
 204   return (CodeRootSetTable*) OrderAccess::load_ptr_acquire(&_table);
 205 }
 206 
 207 void G1CodeRootSet::allocate_small_table() {
 208   _table = new CodeRootSetTable(SmallSize);


 209 }
 210 
 211 void CodeRootSetTable::purge_list_append(CodeRootSetTable* table) {
 212   for (;;) {
 213     table->_purge_next = _purge_list;
 214     CodeRootSetTable* old = (CodeRootSetTable*) Atomic::cmpxchg_ptr(table, &_purge_list, table->_purge_next);
 215     if (old == table->_purge_next) {
 216       break;
 217     }
 218   }
 219 }
 220 
 221 void CodeRootSetTable::purge() {
 222   CodeRootSetTable* table = _purge_list;
 223   _purge_list = NULL;
 224   while (table != NULL) {
 225     CodeRootSetTable* to_purge = table;
 226     table = table->_purge_next;
 227     delete to_purge;
 228   }




 188         remove_entry(e, previous);
 189         ++num_removed;
 190       } else {
 191         previous = e;
 192       }
 193       e = next;
 194     }
 195   }
 196   return num_removed;
 197 }
 198 
 199 G1CodeRootSet::~G1CodeRootSet() {
 200   delete _table;
 201 }
 202 
 203 CodeRootSetTable* G1CodeRootSet::load_acquire_table() {
 204   return (CodeRootSetTable*) OrderAccess::load_ptr_acquire(&_table);
 205 }
 206 
 207 void G1CodeRootSet::allocate_small_table() {
 208   CodeRootSetTable* temp = new CodeRootSetTable(SmallSize);
 209 
 210   OrderAccess::release_store_ptr(&_table, temp);
 211 }
 212 
 213 void CodeRootSetTable::purge_list_append(CodeRootSetTable* table) {
 214   for (;;) {
 215     table->_purge_next = _purge_list;
 216     CodeRootSetTable* old = (CodeRootSetTable*) Atomic::cmpxchg_ptr(table, &_purge_list, table->_purge_next);
 217     if (old == table->_purge_next) {
 218       break;
 219     }
 220   }
 221 }
 222 
 223 void CodeRootSetTable::purge() {
 224   CodeRootSetTable* table = _purge_list;
 225   _purge_list = NULL;
 226   while (table != NULL) {
 227     CodeRootSetTable* to_purge = table;
 228     table = table->_purge_next;
 229     delete to_purge;
 230   }


< prev index next >