diff -r c396e381cfa4 -r ae2e53e379cb src/hotspot/share/classfile/symbolTable.cpp --- a/src/hotspot/share/classfile/symbolTable.cpp Mon Jun 24 14:13:49 2019 -0400 +++ b/src/hotspot/share/classfile/symbolTable.cpp Mon Jun 24 16:51:23 2019 -0400 @@ -77,8 +77,7 @@ // -------------------------------------------------------------------------- -typedef ConcurrentHashTable SymbolTableHash; +typedef ConcurrentHashTable SymbolTableHash; static SymbolTableHash* _local_table = NULL; volatile bool SymbolTable::_has_work = 0; @@ -121,10 +120,12 @@ } #endif -class SymbolTableConfig : public SymbolTableHash::BaseConfig { +class SymbolTableConfig : public AllStatic { private: public: - static uintx get_hash(Symbol* const& value, bool* is_dead) { + typedef Symbol* Value; // value of the Node in the hashtable + + static uintx get_hash(Value const& value, bool* is_dead) { *is_dead = (value->refcount() == 0); if (*is_dead) { return 0; @@ -133,11 +134,11 @@ } } // We use default allocation/deallocation but counted - static void* allocate_node(size_t size, Symbol* const& value) { + static void* allocate_node(size_t size, Value const& value) { SymbolTable::item_added(); - return SymbolTableHash::BaseConfig::allocate_node(size, value); + return AllocateHeap(size, mtSymbol); } - static void free_node(void* memory, Symbol* const& value) { + static void free_node(void* memory, Value const& value) { // We get here because #1 some threads lost a race to insert a newly created Symbol // or #2 we're cleaning up unused symbol. // If #1, then the symbol can be either permanent (refcount==PERM_REFCOUNT), @@ -150,7 +151,7 @@ assert(value->refcount() == 0, "expected dead symbol"); } SymbolTable::delete_symbol(value); - SymbolTableHash::BaseConfig::free_node(memory, value); + FreeHeap(memory); SymbolTable::item_removed(); } };