194 void package_exports_do(ModuleClosure* const f);
195
196 TRACE_DEFINE_TRACE_ID_METHODS;
197
198 // Purge dead weak references out of exported list when any given class loader is unloaded.
199 void purge_qualified_exports();
200 void delete_qualified_exports();
201
202 void print(outputStream* st = tty);
203 void verify();
204 };
205
206 // The PackageEntryTable is a Hashtable containing a list of all packages defined
207 // by a particular class loader. Each package is represented as a PackageEntry node.
208 // The PackageEntryTable's lookup is lock free.
209 //
210 class PackageEntryTable : public Hashtable<Symbol*, mtModule> {
211 friend class VMStructs;
212 public:
213 enum Constants {
214 _packagetable_entry_size = 1009 // number of entries in package entry table
215 };
216
217 private:
218 PackageEntry* new_entry(unsigned int hash, Symbol* name, ModuleEntry* module);
219 void add_entry(int index, PackageEntry* new_entry);
220
221 int entry_size() const { return BasicHashtable<mtModule>::entry_size(); }
222
223 PackageEntry** bucket_addr(int i) {
224 return (PackageEntry**)Hashtable<Symbol*, mtModule>::bucket_addr(i);
225 }
226
227 static unsigned int compute_hash(Symbol* name) { return (unsigned int)(name->identity_hash()); }
228 int index_for(Symbol* name) const { return hash_to_index(compute_hash(name)); }
229
230 public:
231 PackageEntryTable(int table_size);
232 ~PackageEntryTable();
233
234 PackageEntry* bucket(int i) {
|
194 void package_exports_do(ModuleClosure* const f);
195
196 TRACE_DEFINE_TRACE_ID_METHODS;
197
198 // Purge dead weak references out of exported list when any given class loader is unloaded.
199 void purge_qualified_exports();
200 void delete_qualified_exports();
201
202 void print(outputStream* st = tty);
203 void verify();
204 };
205
206 // The PackageEntryTable is a Hashtable containing a list of all packages defined
207 // by a particular class loader. Each package is represented as a PackageEntry node.
208 // The PackageEntryTable's lookup is lock free.
209 //
210 class PackageEntryTable : public Hashtable<Symbol*, mtModule> {
211 friend class VMStructs;
212 public:
213 enum Constants {
214 _packagetable_entry_size = 109 // number of entries in package entry table
215 };
216
217 private:
218 PackageEntry* new_entry(unsigned int hash, Symbol* name, ModuleEntry* module);
219 void add_entry(int index, PackageEntry* new_entry);
220
221 int entry_size() const { return BasicHashtable<mtModule>::entry_size(); }
222
223 PackageEntry** bucket_addr(int i) {
224 return (PackageEntry**)Hashtable<Symbol*, mtModule>::bucket_addr(i);
225 }
226
227 static unsigned int compute_hash(Symbol* name) { return (unsigned int)(name->identity_hash()); }
228 int index_for(Symbol* name) const { return hash_to_index(compute_hash(name)); }
229
230 public:
231 PackageEntryTable(int table_size);
232 ~PackageEntryTable();
233
234 PackageEntry* bucket(int i) {
|