197 _found = Handle(_thread, value->resolve()); 198 return true; 199 } 200 }; 201 202 static size_t ceil_log2(size_t val) { 203 size_t ret; 204 for (ret = 1; ((size_t)1 << ret) < val; ++ret); 205 return ret; 206 } 207 208 void StringTable::create_table() { 209 size_t start_size_log_2 = ceil_log2(StringTableSize); 210 _current_size = ((size_t)1) << start_size_log_2; 211 log_trace(stringtable)("Start size: " SIZE_FORMAT " (" SIZE_FORMAT ")", 212 _current_size, start_size_log_2); 213 _local_table = new StringTableHash(start_size_log_2, END_SIZE, REHASH_LEN); 214 } 215 216 size_t StringTable::item_added() { 217 return Atomic::add((size_t)1, &_items_count); 218 } 219 220 size_t StringTable::add_items_to_clean(size_t ndead) { 221 size_t total = Atomic::add((size_t)ndead, &_uncleaned_items_count); 222 log_trace(stringtable)( 223 "Uncleaned items:" SIZE_FORMAT " added: " SIZE_FORMAT " total:" SIZE_FORMAT, 224 _uncleaned_items_count, ndead, total); 225 return total; 226 } 227 228 void StringTable::item_removed() { 229 Atomic::add((size_t)-1, &_items_count); 230 } 231 232 double StringTable::get_load_factor() { 233 return (double)_items_count/_current_size; 234 } 235 236 double StringTable::get_dead_factor() { 237 return (double)_uncleaned_items_count/_current_size; 238 } 239 240 size_t StringTable::table_size() { 241 return ((size_t)1) << _local_table->get_size_log2(Thread::current()); 242 } 243 244 void StringTable::trigger_concurrent_work() { 245 MutexLocker ml(Service_lock, Mutex::_no_safepoint_check_flag); 246 _has_work = true; 247 Service_lock->notify_all(); 248 } 249 | 197 _found = Handle(_thread, value->resolve()); 198 return true; 199 } 200 }; 201 202 static size_t ceil_log2(size_t val) { 203 size_t ret; 204 for (ret = 1; ((size_t)1 << ret) < val; ++ret); 205 return ret; 206 } 207 208 void StringTable::create_table() { 209 size_t start_size_log_2 = ceil_log2(StringTableSize); 210 _current_size = ((size_t)1) << start_size_log_2; 211 log_trace(stringtable)("Start size: " SIZE_FORMAT " (" SIZE_FORMAT ")", 212 _current_size, start_size_log_2); 213 _local_table = new StringTableHash(start_size_log_2, END_SIZE, REHASH_LEN); 214 } 215 216 size_t StringTable::item_added() { 217 return Atomic::add(&_items_count, (size_t)1); 218 } 219 220 size_t StringTable::add_items_to_clean(size_t ndead) { 221 size_t total = Atomic::add(&_uncleaned_items_count, (size_t)ndead); 222 log_trace(stringtable)( 223 "Uncleaned items:" SIZE_FORMAT " added: " SIZE_FORMAT " total:" SIZE_FORMAT, 224 _uncleaned_items_count, ndead, total); 225 return total; 226 } 227 228 void StringTable::item_removed() { 229 Atomic::add(&_items_count, (size_t)-1); 230 } 231 232 double StringTable::get_load_factor() { 233 return (double)_items_count/_current_size; 234 } 235 236 double StringTable::get_dead_factor() { 237 return (double)_uncleaned_items_count/_current_size; 238 } 239 240 size_t StringTable::table_size() { 241 return ((size_t)1) << _local_table->get_size_log2(Thread::current()); 242 } 243 244 void StringTable::trigger_concurrent_work() { 245 MutexLocker ml(Service_lock, Mutex::_no_safepoint_check_flag); 246 _has_work = true; 247 Service_lock->notify_all(); 248 } 249 |