1.1 --- a/src/share/vm/classfile/classLoaderData.cpp Fri Dec 07 10:55:16 2012 -0800 1.2 +++ b/src/share/vm/classfile/classLoaderData.cpp Wed Dec 12 11:39:29 2012 -0500 1.3 @@ -64,8 +64,10 @@ 1.4 1.5 ClassLoaderData * ClassLoaderData::_the_null_class_loader_data = NULL; 1.6 1.7 -ClassLoaderData::ClassLoaderData(Handle h_class_loader) : _class_loader(h_class_loader()), 1.8 - _metaspace(NULL), _unloading(false), _keep_alive(false), _klasses(NULL), 1.9 +ClassLoaderData::ClassLoaderData(Handle h_class_loader, bool is_anonymous) : 1.10 + _class_loader(h_class_loader()), 1.11 + _is_anonymous(is_anonymous), _keep_alive(is_anonymous), // initially 1.12 + _metaspace(NULL), _unloading(false), _klasses(NULL), 1.13 _claimed(0), _jmethod_ids(NULL), _handles(NULL), _deallocate_list(NULL), 1.14 _next(NULL), _dependencies(NULL), 1.15 _metaspace_lock(new Mutex(Monitor::leaf+1, "Metaspace allocation lock", true)) { 1.16 @@ -257,13 +259,6 @@ 1.17 ShouldNotReachHere(); // should have found this class!! 1.18 } 1.19 1.20 - 1.21 -bool ClassLoaderData::is_anonymous() const { 1.22 - Klass* k = _klasses; 1.23 - return (_keep_alive || (k != NULL && k->oop_is_instance() && 1.24 - InstanceKlass::cast(k)->is_anonymous())); 1.25 -} 1.26 - 1.27 void ClassLoaderData::unload() { 1.28 _unloading = true; 1.29 1.30 @@ -396,8 +391,7 @@ 1.31 // These anonymous class loaders are to contain classes used for JSR292 1.32 ClassLoaderData* ClassLoaderData::anonymous_class_loader_data(oop loader, TRAPS) { 1.33 // Add a new class loader data to the graph. 1.34 - ClassLoaderData* cld = ClassLoaderDataGraph::add(NULL, loader, CHECK_NULL); 1.35 - return cld; 1.36 + return ClassLoaderDataGraph::add(NULL, loader, CHECK_NULL); 1.37 } 1.38 1.39 const char* ClassLoaderData::loader_name() { 1.40 @@ -475,7 +469,9 @@ 1.41 // Create one. 1.42 ClassLoaderData* *list_head = &_head; 1.43 ClassLoaderData* next = _head; 1.44 - ClassLoaderData* cld = new ClassLoaderData(loader); 1.45 + 1.46 + bool is_anonymous = (cld_addr == NULL); 1.47 + ClassLoaderData* cld = new ClassLoaderData(loader, is_anonymous); 1.48 1.49 if (cld_addr != NULL) { 1.50 // First, Atomically set it 1.51 @@ -485,10 +481,6 @@ 1.52 // Returns the data. 1.53 return old; 1.54 } 1.55 - } else { 1.56 - // Disallow unloading for this CLD during initialization if there is no 1.57 - // class_loader oop to link this to. 1.58 - cld->set_keep_alive(true); 1.59 } 1.60 1.61 // We won the race, and therefore the task of adding the data to the list of