< prev index next >
src/share/vm/classfile/classLoaderData.cpp
Print this page
*** 95,104 ****
--- 95,119 ----
_modules(NULL), _packages(NULL),
_claimed(0), _jmethod_ids(NULL), _handles(), _deallocate_list(NULL),
_next(NULL), _dependencies(dependencies),
_metaspace_lock(new Mutex(Monitor::leaf+1, "Metaspace allocation lock", true,
Monitor::_safepoint_check_never)) {
+
+ // A ClassLoaderData created solely for an anonymous class should never have a
+ // ModuleEntryTable or PackageEntryTable created for it. The defining package
+ // and module for an anonymous class will be found in its host class.
+ if (!is_anonymous) {
+ if (h_class_loader.is_null()) {
+ // Create unnamed module for boot loader
+ _unnamed_module = ModuleEntry::create_boot_unnamed_module(this);
+ } else {
+ // Create unnamed module for all other loaders
+ _unnamed_module = ModuleEntry::create_unnamed_module(this);
+ }
+ } else {
+ _unnamed_module = NULL;
+ }
TRACE_INIT_ID(this);
}
void ClassLoaderData::init_dependencies(TRAPS) {
assert(!Universe::is_fully_initialized(), "should only be called when initializing");
*** 274,283 ****
--- 289,301 ----
}
}
void ClassLoaderData::modules_do(void f(ModuleEntry*)) {
assert_locked_or_safepoint(Module_lock);
+ if (_unnamed_module != NULL) {
+ f(_unnamed_module);
+ }
if (_modules != NULL) {
for (int i = 0; i < _modules->table_size(); i++) {
for (ModuleEntry* entry = _modules->bucket(i);
entry != NULL;
entry = entry->next()) {
*** 499,512 ****
if (modules == NULL) {
MutexLocker m1(Module_lock);
// Check if _modules got allocated while we were waiting for this lock.
if ((modules = _modules) == NULL) {
modules = new ModuleEntryTable(ModuleEntryTable::_moduletable_entry_size);
- // Each loader has one unnamed module entry. Create it before
- // any classes, loaded by this loader, are defined in case
- // they end up being defined in loader's unnamed module.
- modules->create_unnamed_module(this);
{
MutexLockerEx m1(metaspace_lock(), Mutex::_no_safepoint_check_flag);
// Ensure _modules is stable, since it is examined without a lock
OrderAccess::release_store_ptr(&_modules, modules);
--- 517,526 ----
*** 527,537 ****
|| is_alive_closure->do_object_b(keep_alive_object());
return alive;
}
-
ClassLoaderData::~ClassLoaderData() {
// Release C heap structures for all the classes.
classes_do(InstanceKlass::release_C_heap_structures);
// Release C heap allocated hashtable for all the packages.
--- 541,550 ----
*** 546,555 ****
--- 559,573 ----
// Destroy the table itself
delete _modules;
_modules = NULL;
}
+ if (_unnamed_module != NULL) {
+ FREE_C_HEAP_ARRAY(char, _unnamed_module);
+ _unnamed_module = NULL;
+ }
+
// release the metaspace
Metaspace *m = _metaspace;
if (m != NULL) {
_metaspace = NULL;
delete m;
< prev index next >