64 sym = new (len, THREAD) Symbol(name, len, 1); 65 assert(sym != NULL, "new should call vm_exit_out_of_memory if C_HEAP is exhausted"); 66 } else { 67 // Allocate to global arena 68 sym = new (len, arena(), THREAD) Symbol(name, len, PERM_REFCOUNT); 69 } 70 return sym; 71 } 72 73 void SymbolTable::initialize_symbols(int arena_alloc_size) { 74 // Initialize the arena for global symbols, size passed in depends on CDS. 75 if (arena_alloc_size == 0) { 76 _arena = new (mtSymbol) Arena(mtSymbol); 77 } else { 78 _arena = new (mtSymbol) Arena(mtSymbol, arena_alloc_size); 79 } 80 } 81 82 // Call function for all symbols in the symbol table. 83 void SymbolTable::symbols_do(SymbolClosure *cl) { 84 if (!DumpSharedSpaces) { 85 // all symbols from shared table 86 _shared_table.symbols_do(cl); 87 } 88 89 // all symbols from the dynamic table 90 const int n = the_table()->table_size(); 91 for (int i = 0; i < n; i++) { 92 for (HashtableEntry<Symbol*, mtSymbol>* p = the_table()->bucket(i); 93 p != NULL; 94 p = p->next()) { 95 cl->do_symbol(p->literal_addr()); 96 } 97 } 98 } 99 100 void SymbolTable::metaspace_pointers_do(MetaspaceClosure* it) { 101 assert(DumpSharedSpaces, "called only during dump time"); 102 const int n = the_table()->table_size(); 103 for (int i = 0; i < n; i++) { 104 for (HashtableEntry<Symbol*, mtSymbol>* p = the_table()->bucket(i); 105 p != NULL; 106 p = p->next()) { 107 it->push(p->literal_addr()); | 64 sym = new (len, THREAD) Symbol(name, len, 1); 65 assert(sym != NULL, "new should call vm_exit_out_of_memory if C_HEAP is exhausted"); 66 } else { 67 // Allocate to global arena 68 sym = new (len, arena(), THREAD) Symbol(name, len, PERM_REFCOUNT); 69 } 70 return sym; 71 } 72 73 void SymbolTable::initialize_symbols(int arena_alloc_size) { 74 // Initialize the arena for global symbols, size passed in depends on CDS. 75 if (arena_alloc_size == 0) { 76 _arena = new (mtSymbol) Arena(mtSymbol); 77 } else { 78 _arena = new (mtSymbol) Arena(mtSymbol, arena_alloc_size); 79 } 80 } 81 82 // Call function for all symbols in the symbol table. 83 void SymbolTable::symbols_do(SymbolClosure *cl) { 84 // all symbols from shared table 85 _shared_table.symbols_do(cl); 86 87 // all symbols from the dynamic table 88 const int n = the_table()->table_size(); 89 for (int i = 0; i < n; i++) { 90 for (HashtableEntry<Symbol*, mtSymbol>* p = the_table()->bucket(i); 91 p != NULL; 92 p = p->next()) { 93 cl->do_symbol(p->literal_addr()); 94 } 95 } 96 } 97 98 void SymbolTable::metaspace_pointers_do(MetaspaceClosure* it) { 99 assert(DumpSharedSpaces, "called only during dump time"); 100 const int n = the_table()->table_size(); 101 for (int i = 0; i < n; i++) { 102 for (HashtableEntry<Symbol*, mtSymbol>* p = the_table()->bucket(i); 103 p != NULL; 104 p = p->next()) { 105 it->push(p->literal_addr()); |