< prev index next >

src/hotspot/share/gc/g1/g1CodeCacheRemSet.cpp

Print this page




 153   return num_removed;
 154 }
 155 
 156 G1CodeRootSet::~G1CodeRootSet() {
 157   delete _table;
 158 }
 159 
 160 G1CodeRootSetTable* G1CodeRootSet::load_acquire_table() {
 161   return Atomic::load_acquire(&_table);
 162 }
 163 
 164 void G1CodeRootSet::allocate_small_table() {
 165   G1CodeRootSetTable* temp = new G1CodeRootSetTable(SmallSize);
 166 
 167   Atomic::release_store(&_table, temp);
 168 }
 169 
 170 void G1CodeRootSetTable::purge_list_append(G1CodeRootSetTable* table) {
 171   for (;;) {
 172     table->_purge_next = _purge_list;
 173     G1CodeRootSetTable* old = Atomic::cmpxchg(table, &_purge_list, table->_purge_next);
 174     if (old == table->_purge_next) {
 175       break;
 176     }
 177   }
 178 }
 179 
 180 void G1CodeRootSetTable::purge() {
 181   G1CodeRootSetTable* table = _purge_list;
 182   _purge_list = NULL;
 183   while (table != NULL) {
 184     G1CodeRootSetTable* to_purge = table;
 185     table = table->_purge_next;
 186     delete to_purge;
 187   }
 188 }
 189 
 190 void G1CodeRootSet::move_to_large() {
 191   G1CodeRootSetTable* temp = new G1CodeRootSetTable(LargeSize);
 192 
 193   _table->copy_to(temp);




 153   return num_removed;
 154 }
 155 
 156 G1CodeRootSet::~G1CodeRootSet() {
 157   delete _table;
 158 }
 159 
 160 G1CodeRootSetTable* G1CodeRootSet::load_acquire_table() {
 161   return Atomic::load_acquire(&_table);
 162 }
 163 
 164 void G1CodeRootSet::allocate_small_table() {
 165   G1CodeRootSetTable* temp = new G1CodeRootSetTable(SmallSize);
 166 
 167   Atomic::release_store(&_table, temp);
 168 }
 169 
 170 void G1CodeRootSetTable::purge_list_append(G1CodeRootSetTable* table) {
 171   for (;;) {
 172     table->_purge_next = _purge_list;
 173     G1CodeRootSetTable* old = Atomic::cmpxchg(&_purge_list, table->_purge_next, table);
 174     if (old == table->_purge_next) {
 175       break;
 176     }
 177   }
 178 }
 179 
 180 void G1CodeRootSetTable::purge() {
 181   G1CodeRootSetTable* table = _purge_list;
 182   _purge_list = NULL;
 183   while (table != NULL) {
 184     G1CodeRootSetTable* to_purge = table;
 185     table = table->_purge_next;
 186     delete to_purge;
 187   }
 188 }
 189 
 190 void G1CodeRootSet::move_to_large() {
 191   G1CodeRootSetTable* temp = new G1CodeRootSetTable(LargeSize);
 192 
 193   _table->copy_to(temp);


< prev index next >