< prev index next >

src/hotspot/share/classfile/symbolTable.hpp

Print this page




  93                               SymbolTableConfig, mtSymbol> SymbolTableHash;
  94 
  95 class SymbolTableCreateEntry;
  96 
  97 class SymbolTable : public CHeapObj<mtSymbol> {
  98   friend class VMStructs;
  99   friend class Symbol;
 100   friend class ClassFileParser;
 101   friend class SymbolTableConfig;
 102   friend class SymbolTableCreateEntry;
 103 
 104 private:
 105   static void delete_symbol(Symbol* sym);
 106   void grow(JavaThread* jt);
 107   void clean_dead_entries(JavaThread* jt);
 108 
 109   // The symbol table
 110   static SymbolTable* _the_table;
 111   // Shared symbol table.
 112   static CompactHashtable<Symbol*, char> _shared_table;
 113   static bool _lookup_shared_first;
 114   static bool _alt_hash;
 115 
 116   // For statistics
 117   static int _symbols_removed;
 118   static int _symbols_counted;
 119 
 120   // Set if one bucket is out of balance due to hash algorithm deficiency
 121   SymbolTableHash* _local_table;
 122   size_t _current_size;
 123   volatile bool _has_work;

 124   volatile bool _needs_rehashing;
 125 
 126   volatile int _items;
 127   DEFINE_PAD_MINUS_SIZE(1, DEFAULT_CACHE_LINE_SIZE, sizeof(volatile int));
 128   volatile int _uncleaned_items;
 129   DEFINE_PAD_MINUS_SIZE(2, DEFAULT_CACHE_LINE_SIZE, sizeof(volatile int));
 130 
 131   double get_load_factor();
 132   double get_dead_factor();
 133 
 134   void check_concurrent_work();
 135   void trigger_concurrent_work();
 136 
 137   static uintx item_added();
 138   static void item_removed();
 139   static void set_item_clean_count(size_t ncl);
 140   static void mark_item_clean_count();
 141 
 142   SymbolTable();
 143 
 144   Symbol* allocate_symbol(const u1* name, int len, bool c_heap, TRAPS); // Assumes no characters larger than 0x7F
 145   Symbol* do_lookup(char* name, int len, uintx hash);
 146   Symbol* do_add_if_needed(char* name, int len, uintx hash, bool heap, TRAPS);
 147 
 148   // Adding elements
 149   static void add(ClassLoaderData* loader_data,
 150                   const constantPoolHandle& cp, int names_count,
 151                   const char** names, int* lengths, int* cp_indices,
 152                   unsigned int* hashValues, TRAPS);
 153 
 154   static void new_symbols(ClassLoaderData* loader_data,
 155                           const constantPoolHandle& cp, int names_count,
 156                           const char** name, int* lengths,
 157                           int* cp_indices, unsigned int* hashValues,
 158                           TRAPS) {
 159     add(loader_data, cp, names_count, name, lengths, cp_indices, hashValues, THREAD);
 160   }
 161 
 162   static Symbol* lookup_shared(const char* name, int len, unsigned int hash);
 163   Symbol* lookup_dynamic(const char* name, int len, unsigned int hash);
 164   Symbol* lookup_common(const char* name, int len, unsigned int hash);
 165 
 166   // Arena for permanent symbols (null class loader) that are never unloaded




  93                               SymbolTableConfig, mtSymbol> SymbolTableHash;
  94 
  95 class SymbolTableCreateEntry;
  96 
  97 class SymbolTable : public CHeapObj<mtSymbol> {
  98   friend class VMStructs;
  99   friend class Symbol;
 100   friend class ClassFileParser;
 101   friend class SymbolTableConfig;
 102   friend class SymbolTableCreateEntry;
 103 
 104 private:
 105   static void delete_symbol(Symbol* sym);
 106   void grow(JavaThread* jt);
 107   void clean_dead_entries(JavaThread* jt);
 108 
 109   // The symbol table
 110   static SymbolTable* _the_table;
 111   // Shared symbol table.
 112   static CompactHashtable<Symbol*, char> _shared_table;
 113   static volatile bool _lookup_shared_first;
 114   static volatile bool _alt_hash;
 115 
 116   // For statistics
 117   volatile size_t _symbols_removed;
 118   volatile size_t _symbols_counted;
 119 

 120   SymbolTableHash* _local_table;
 121   size_t _current_size;
 122   volatile bool _has_work;
 123   // Set if one bucket is out of balance due to hash algorithm deficiency
 124   volatile bool _needs_rehashing;
 125 
 126   volatile size_t _items_count;
 127   volatile size_t _uncleaned_items_count;


 128 
 129   double get_load_factor();
 130   double get_dead_factor();
 131 
 132   void check_concurrent_work();
 133   void trigger_concurrent_work();
 134 
 135   static void item_added();
 136   static void item_removed();
 137   static void set_item_clean_count(size_t ncl);
 138   static void mark_item_clean_count();
 139 
 140   SymbolTable();
 141 
 142   Symbol* allocate_symbol(const char* name, int len, bool c_heap, TRAPS); // Assumes no characters larger than 0x7F
 143   Symbol* do_lookup(const char* name, int len, uintx hash);
 144   Symbol* do_add_if_needed(const char* name, int len, uintx hash, bool heap, TRAPS);
 145 
 146   // Adding elements
 147   static void add(ClassLoaderData* loader_data,
 148                   const constantPoolHandle& cp, int names_count,
 149                   const char** names, int* lengths, int* cp_indices,
 150                   unsigned int* hashValues, TRAPS);
 151 
 152   static void new_symbols(ClassLoaderData* loader_data,
 153                           const constantPoolHandle& cp, int names_count,
 154                           const char** name, int* lengths,
 155                           int* cp_indices, unsigned int* hashValues,
 156                           TRAPS) {
 157     add(loader_data, cp, names_count, name, lengths, cp_indices, hashValues, THREAD);
 158   }
 159 
 160   static Symbol* lookup_shared(const char* name, int len, unsigned int hash);
 161   Symbol* lookup_dynamic(const char* name, int len, unsigned int hash);
 162   Symbol* lookup_common(const char* name, int len, unsigned int hash);
 163 
 164   // Arena for permanent symbols (null class loader) that are never unloaded


< prev index next >