< prev index next >
src/share/vm/classfile/stringTable.hpp
Print this page
@@ -26,29 +26,38 @@
#define SHARE_VM_CLASSFILE_STRINGTABLE_HPP
#include "memory/allocation.inline.hpp"
#include "utilities/hashtable.hpp"
+template <class T, class N> class CompactHashtable;
+class CompactHashtableWriter;
+class FileMapInfo;
+
class StringTable : public RehashableHashtable<oop, mtSymbol> {
friend class VMStructs;
friend class Symbol;
private:
// The string table
static StringTable* _the_table;
+ // Shared string table
+ static CompactHashtable<oop, char> _shared_table;
+ static bool _ignore_shared_strings;
+
// Set if one bucket is out of balance due to hash algorithm deficiency
static bool _needs_rehashing;
// Claimed high water mark for parallel chunked scanning
static volatile int _parallel_claimed_idx;
static oop intern(Handle string_or_null, jchar* chars, int length, TRAPS);
oop basic_add(int index, Handle string_or_null, jchar* name, int len,
unsigned int hashValue, TRAPS);
- oop lookup(int index, jchar* chars, int length, unsigned int hashValue);
+ oop lookup_dynamic(int index, jchar* chars, int length, unsigned int hashValue);
+ static oop lookup_shared(jchar* name, int len);
// Apply the give oop closure to the entries to the buckets
// in the range [start_idx, end_idx).
static void buckets_oops_do(OopClosure* f, int start_idx, int end_idx);
// Unlink or apply the give oop closure to the entries to the buckets
@@ -139,16 +148,18 @@
HashtableEntry<oop, mtSymbol>* e_ptr,
VerifyMesgModes mesg_mode);
static int verify_and_compare_entries();
// Sharing
- static void copy_buckets(char** top, char*end) {
- the_table()->Hashtable<oop, mtSymbol>::copy_buckets(top, end);
- }
- static void copy_table(char** top, char*end) {
- the_table()->Hashtable<oop, mtSymbol>::copy_table(top, end);
- }
+ static void ignore_shared_strings(bool v) { _ignore_shared_strings = v; }
+ static bool shared_string_ignored() { return _ignore_shared_strings; }
+ static void shared_oops_do(OopClosure* f);
+ static bool copy_shared_string(GrowableArray<MemRegion> *string_space,
+ CompactHashtableWriter* ch_table);
+ static bool copy_compact_table(char** top, char* end, GrowableArray<MemRegion> *string_space,
+ size_t* space_size);
+ static const char* init_shared_table(FileMapInfo *mapinfo, char* buffer);
static void reverse() {
the_table()->Hashtable<oop, mtSymbol>::reverse();
}
// Rehash the symbol table if it gets out of balance
< prev index next >