< 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 >