src/hotspot/share/classfile/stringTable.cpp
changeset 55478 ae2e53e379cb
parent 55328 d9a157f6fd71
child 55734 51f5b4c29626
equal deleted inserted replaced
55477:c396e381cfa4 55478:ae2e53e379cb
    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 {