equal
deleted
inserted
replaced
77 > _shared_table; |
77 > _shared_table; |
78 #endif |
78 #endif |
79 |
79 |
80 // -------------------------------------------------------------------------- |
80 // -------------------------------------------------------------------------- |
81 |
81 |
82 typedef ConcurrentHashTable<WeakHandle<vm_string_table_data>, |
82 typedef ConcurrentHashTable<StringTableConfig, mtSymbol> StringTableHash; |
83 StringTableConfig, mtSymbol> StringTableHash; |
|
84 static StringTableHash* _local_table = NULL; |
83 static StringTableHash* _local_table = NULL; |
85 |
84 |
86 volatile bool StringTable::_has_work = false; |
85 volatile bool StringTable::_has_work = false; |
87 volatile bool StringTable::_needs_rehashing = false; |
86 volatile bool StringTable::_needs_rehashing = false; |
88 |
87 |
99 return useAlt ? |
98 return useAlt ? |
100 AltHashing::murmur3_32(murmur_seed, s, len) : |
99 AltHashing::murmur3_32(murmur_seed, s, len) : |
101 java_lang_String::hash_code(s, len); |
100 java_lang_String::hash_code(s, len); |
102 } |
101 } |
103 |
102 |
104 class StringTableConfig : public StringTableHash::BaseConfig { |
103 class StringTableConfig : public StackObj { |
105 private: |
104 private: |
106 public: |
105 public: |
107 static uintx get_hash(WeakHandle<vm_string_table_data> const& value, |
106 typedef WeakHandle<vm_string_table_data> Value; |
108 bool* is_dead) { |
107 |
|
108 static uintx get_hash(Value const& value, bool* is_dead) { |
109 EXCEPTION_MARK; |
109 EXCEPTION_MARK; |
110 oop val_oop = value.peek(); |
110 oop val_oop = value.peek(); |
111 if (val_oop == NULL) { |
111 if (val_oop == NULL) { |
112 *is_dead = true; |
112 *is_dead = true; |
113 return 0; |
113 return 0; |
122 } |
122 } |
123 vm_exit_out_of_memory(length, OOM_MALLOC_ERROR, "get hash from oop"); |
123 vm_exit_out_of_memory(length, OOM_MALLOC_ERROR, "get hash from oop"); |
124 return 0; |
124 return 0; |
125 } |
125 } |
126 // We use default allocation/deallocation but counted |
126 // We use default allocation/deallocation but counted |
127 static void* allocate_node(size_t size, |
127 static void* allocate_node(size_t size, Value const& value) { |
128 WeakHandle<vm_string_table_data> const& value) { |
|
129 StringTable::item_added(); |
128 StringTable::item_added(); |
130 return StringTableHash::BaseConfig::allocate_node(size, value); |
129 return AllocateHeap(size, mtSymbol); |
131 } |
130 } |
132 static void free_node(void* memory, |
131 static void free_node(void* memory, Value const& value) { |
133 WeakHandle<vm_string_table_data> const& value) { |
|
134 value.release(); |
132 value.release(); |
135 StringTableHash::BaseConfig::free_node(memory, value); |
133 FreeHeap(memory); |
136 StringTable::item_removed(); |
134 StringTable::item_removed(); |
137 } |
135 } |
138 }; |
136 }; |
139 |
137 |
140 class StringTableLookupJchar : StackObj { |
138 class StringTableLookupJchar : StackObj { |