< prev index next >
src/hotspot/share/classfile/stringTable.cpp
Print this page
*** 62,74 ****
// If we have as many dead items as 50% of the number of bucket
#define CLEAN_DEAD_HIGH_WATER_MARK 0.5
// --------------------------------------------------------------------------
StringTable* StringTable::_the_table = NULL;
- bool StringTable::_shared_string_mapped = false;
CompactHashtable<oop, char> StringTable::_shared_table;
! bool StringTable::_alt_hash = false;
static juint murmur_seed = 0;
uintx hash_string(const jchar* s, int len, bool useAlt) {
return useAlt ?
--- 62,74 ----
// If we have as many dead items as 50% of the number of bucket
#define CLEAN_DEAD_HIGH_WATER_MARK 0.5
// --------------------------------------------------------------------------
StringTable* StringTable::_the_table = NULL;
CompactHashtable<oop, char> StringTable::_shared_table;
! volatile bool StringTable::_shared_string_mapped = false;
! volatile bool StringTable::_alt_hash = false;
static juint murmur_seed = 0;
uintx hash_string(const jchar* s, int len, bool useAlt) {
return useAlt ?
*** 174,223 ****
_found = Handle(_thread, value->resolve());
return true;
}
};
! static size_t ceil_pow_2(uintx val) {
size_t ret;
for (ret = 1; ((size_t)1 << ret) < val; ++ret);
return ret;
}
StringTable::StringTable() : _local_table(NULL), _current_size(0), _has_work(0),
! _needs_rehashing(false), _weak_handles(NULL), _items(0), _uncleaned_items(0) {
_weak_handles = new OopStorage("StringTable weak",
StringTableWeakAlloc_lock,
StringTableWeakActive_lock);
! size_t start_size_log_2 = ceil_pow_2(StringTableSize);
_current_size = ((size_t)1) << start_size_log_2;
log_trace(stringtable)("Start size: " SIZE_FORMAT " (" SIZE_FORMAT ")",
_current_size, start_size_log_2);
_local_table = new StringTableHash(start_size_log_2, END_SIZE, REHASH_LEN);
}
size_t StringTable::item_added() {
! return Atomic::add((size_t)1, &(the_table()->_items));
}
! size_t StringTable::add_items_to_clean(size_t ndead) {
! size_t total = Atomic::add((size_t)ndead, &(the_table()->_uncleaned_items));
log_trace(stringtable)(
"Uncleaned items:" SIZE_FORMAT " added: " SIZE_FORMAT " total:" SIZE_FORMAT,
! the_table()->_uncleaned_items, ndead, total);
return total;
}
void StringTable::item_removed() {
! Atomic::add((size_t)-1, &(the_table()->_items));
}
double StringTable::get_load_factor() {
! return (_items*1.0)/_current_size;
}
double StringTable::get_dead_factor() {
! return (_uncleaned_items*1.0)/_current_size;
}
size_t StringTable::table_size(Thread* thread) {
return ((size_t)(1)) << _local_table->get_size_log2(thread != NULL ? thread
: Thread::current());
--- 174,223 ----
_found = Handle(_thread, value->resolve());
return true;
}
};
! static size_t log2_ceil(uintx val) {
size_t ret;
for (ret = 1; ((size_t)1 << ret) < val; ++ret);
return ret;
}
StringTable::StringTable() : _local_table(NULL), _current_size(0), _has_work(0),
! _needs_rehashing(false), _weak_handles(NULL), _items_count(0), _uncleaned_items_count(0) {
_weak_handles = new OopStorage("StringTable weak",
StringTableWeakAlloc_lock,
StringTableWeakActive_lock);
! size_t start_size_log_2 = log2_ceil(StringTableSize);
_current_size = ((size_t)1) << start_size_log_2;
log_trace(stringtable)("Start size: " SIZE_FORMAT " (" SIZE_FORMAT ")",
_current_size, start_size_log_2);
_local_table = new StringTableHash(start_size_log_2, END_SIZE, REHASH_LEN);
}
size_t StringTable::item_added() {
! return Atomic::add((size_t)1, &(the_table()->_items_count));
}
! size_t StringTable::add_items_count_to_clean(size_t ndead) {
! size_t total = Atomic::add((size_t)ndead, &(the_table()->_uncleaned_items_count));
log_trace(stringtable)(
"Uncleaned items:" SIZE_FORMAT " added: " SIZE_FORMAT " total:" SIZE_FORMAT,
! the_table()->_uncleaned_items_count, ndead, total);
return total;
}
void StringTable::item_removed() {
! Atomic::add((size_t)-1, &(the_table()->_items_count));
}
double StringTable::get_load_factor() {
! return (double)_items_count/_current_size;
}
double StringTable::get_dead_factor() {
! return (double)_uncleaned_items_count/_current_size;
}
size_t StringTable::table_size(Thread* thread) {
return ((size_t)(1)) << _local_table->get_size_log2(thread != NULL ? thread
: Thread::current());
*** 404,414 ****
StringTable::the_table()->_weak_handles->weak_oops_do(&stiac, tmp);
// This is the serial case without ParState.
// Just set the correct number and check for a cleaning phase.
! the_table()->_uncleaned_items = stiac._count;
StringTable::the_table()->check_concurrent_work();
if (processed != NULL) {
*processed = (int) stiac._count_total;
}
--- 404,414 ----
StringTable::the_table()->_weak_handles->weak_oops_do(&stiac, tmp);
// This is the serial case without ParState.
// Just set the correct number and check for a cleaning phase.
! the_table()->_uncleaned_items_count = stiac._count;
StringTable::the_table()->check_concurrent_work();
if (processed != NULL) {
*processed = (int) stiac._count_total;
}
*** 431,441 ****
StringTableIsAliveCounter stiac(cl);
_par_state_string->weak_oops_do(&stiac, &dnc);
// Accumulate the dead strings.
! the_table()->add_items_to_clean(stiac._count);
*processed = (int) stiac._count_total;
*removed = (int) stiac._count;
}
--- 431,441 ----
StringTableIsAliveCounter stiac(cl);
_par_state_string->weak_oops_do(&stiac, &dnc);
// Accumulate the dead strings.
! the_table()->add_items_count_to_clean(stiac._count);
*processed = (int) stiac._count_total;
*removed = (int) stiac._count;
}
*** 841,851 ****
void StringTable::write_to_archive() {
assert(MetaspaceShared::is_heap_object_archiving_allowed(), "must be");
_shared_table.reset();
! int num_buckets = the_table()->_items / SharedSymbolTableBucketSize;
// calculation of num_buckets can result in zero buckets, we need at least one
CompactStringTableWriter writer(num_buckets > 1 ? num_buckets : 1,
&MetaspaceShared::stats()->string);
// Copy the interned strings into the "string space" within the java heap
--- 841,851 ----
void StringTable::write_to_archive() {
assert(MetaspaceShared::is_heap_object_archiving_allowed(), "must be");
_shared_table.reset();
! int num_buckets = the_table()->_items_count / SharedSymbolTableBucketSize;
// calculation of num_buckets can result in zero buckets, we need at least one
CompactStringTableWriter writer(num_buckets > 1 ? num_buckets : 1,
&MetaspaceShared::stats()->string);
// Copy the interned strings into the "string space" within the java heap
< prev index next >