< prev index next >

src/hotspot/share/classfile/symbolTable.cpp

Print this page




 172     _arena = new (mtSymbol) Arena(mtSymbol);
 173   } else {
 174     _arena = new (mtSymbol) Arena(mtSymbol, symbol_alloc_arena_size);
 175   }
 176 }
 177 
 178 void SymbolTable::delete_symbol(Symbol* sym) {
 179   if (sym->refcount() == PERM_REFCOUNT) {
 180     MutexLocker ml(SymbolArena_lock, Mutex::_no_safepoint_check_flag); // Protect arena
 181     // Deleting permanent symbol should not occur very often (insert race condition),
 182     // so log it.
 183     log_trace_symboltable_helper(sym, "Freeing permanent symbol");
 184     if (!arena()->Afree(sym, sym->size())) {
 185       log_trace_symboltable_helper(sym, "Leaked permanent symbol");
 186     }
 187   } else {
 188     delete sym;
 189   }
 190 }
 191 
 192 void SymbolTable::reset_has_items_to_clean() { Atomic::store(false, &_has_items_to_clean); }
 193 void SymbolTable::mark_has_items_to_clean()  { Atomic::store(true, &_has_items_to_clean); }
 194 bool SymbolTable::has_items_to_clean()       { return Atomic::load(&_has_items_to_clean); }
 195 
 196 void SymbolTable::item_added() {
 197   Atomic::inc(&_items_count);
 198 }
 199 
 200 void SymbolTable::item_removed() {
 201   Atomic::inc(&(_symbols_removed));
 202   Atomic::dec(&_items_count);
 203 }
 204 
 205 double SymbolTable::get_load_factor() {
 206   return (double)_items_count/_current_size;
 207 }
 208 
 209 size_t SymbolTable::table_size() {
 210   return ((size_t)1) << _local_table->get_size_log2(Thread::current());
 211 }
 212 
 213 void SymbolTable::trigger_cleanup() {




 172     _arena = new (mtSymbol) Arena(mtSymbol);
 173   } else {
 174     _arena = new (mtSymbol) Arena(mtSymbol, symbol_alloc_arena_size);
 175   }
 176 }
 177 
 178 void SymbolTable::delete_symbol(Symbol* sym) {
 179   if (sym->refcount() == PERM_REFCOUNT) {
 180     MutexLocker ml(SymbolArena_lock, Mutex::_no_safepoint_check_flag); // Protect arena
 181     // Deleting permanent symbol should not occur very often (insert race condition),
 182     // so log it.
 183     log_trace_symboltable_helper(sym, "Freeing permanent symbol");
 184     if (!arena()->Afree(sym, sym->size())) {
 185       log_trace_symboltable_helper(sym, "Leaked permanent symbol");
 186     }
 187   } else {
 188     delete sym;
 189   }
 190 }
 191 
 192 void SymbolTable::reset_has_items_to_clean() { Atomic::store(&_has_items_to_clean, false); }
 193 void SymbolTable::mark_has_items_to_clean()  { Atomic::store(&_has_items_to_clean, true); }
 194 bool SymbolTable::has_items_to_clean()       { return Atomic::load(&_has_items_to_clean); }
 195 
 196 void SymbolTable::item_added() {
 197   Atomic::inc(&_items_count);
 198 }
 199 
 200 void SymbolTable::item_removed() {
 201   Atomic::inc(&(_symbols_removed));
 202   Atomic::dec(&_items_count);
 203 }
 204 
 205 double SymbolTable::get_load_factor() {
 206   return (double)_items_count/_current_size;
 207 }
 208 
 209 size_t SymbolTable::table_size() {
 210   return ((size_t)1) << _local_table->get_size_log2(Thread::current());
 211 }
 212 
 213 void SymbolTable::trigger_cleanup() {


< prev index next >