src/share/vm/classfile/classLoaderData.cpp

changeset 4345
30866cd626b0
parent 4304
90273fc0a981
child 4367
c52660592f37
     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

mercurial