< prev index next >
src/hotspot/share/classfile/stringTable.cpp
Print this page
@@ -817,29 +817,21 @@
// adjust the pointer to the 'value' field in the new String oop
java_lang_String::set_value_raw(new_s, new_v);
return new_s;
}
-class CompactStringTableWriter: public CompactHashtableWriter {
-public:
- CompactStringTableWriter(int num_entries, CompactHashtableStats* stats) :
- CompactHashtableWriter(num_entries, stats) {}
- void add(unsigned int hash, oop string) {
- CompactHashtableWriter::add(hash, CompressedOops::encode(string));
- }
-};
-
struct CopyToArchive : StackObj {
- CompactStringTableWriter* _writer;
- CopyToArchive(CompactStringTableWriter* writer) : _writer(writer) {}
+ CompactHashtableWriter* _writer;
+ CopyToArchive(CompactHashtableWriter* writer) : _writer(writer) {}
bool operator()(WeakHandle<vm_string_table_data>* val) {
oop s = val->peek();
if (s == NULL) {
return true;
}
unsigned int hash = java_lang_String::hash_code(s);
if (hash == 0) {
+ // We do not archive Strings with a 0 hashcode because ......
return true;
}
java_lang_String::set_hash(s, hash);
oop new_s = StringTable::create_archived_string(s, Thread::current());
@@ -847,38 +839,38 @@
return true;
}
val->replace(new_s);
// add to the compact table
- _writer->add(hash, new_s);
+ _writer->add(hash, CompressedOops::encode(new_s));
return true;
}
};
-void StringTable::copy_shared_string_table(CompactStringTableWriter* writer) {
+void StringTable::copy_shared_string_table(CompactHashtableWriter* writer) {
assert(MetaspaceShared::is_heap_object_archiving_allowed(), "must be");
CopyToArchive copy(writer);
StringTable::the_table()->_local_table->do_scan(Thread::current(), copy);
}
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,
+ int num_buckets = CompactHashtableWriter::default_num_buckets(
+ StringTable::the_table()->_items_count);
+ CompactHashtableWriter writer(num_buckets,
&MetaspaceShared::stats()->string);
// Copy the interned strings into the "string space" within the java heap
copy_shared_string_table(&writer);
writer.dump(&_shared_table, "string");
}
-void StringTable::serialize(SerializeClosure* soc) {
- _shared_table.serialize(soc);
+void StringTable::serialize_shared_table_header(SerializeClosure* soc) {
+ _shared_table.serialize_header(soc);
if (soc->writing()) {
// Sanity. Make sure we don't use the shared table at dump time
_shared_table.reset();
} else if (!_shared_string_mapped) {
< prev index next >