equal
deleted
inserted
replaced
107 Metaspace * _metaspace; // Meta-space where meta-data defined by the |
107 Metaspace * _metaspace; // Meta-space where meta-data defined by the |
108 // classes in the class loader are allocated. |
108 // classes in the class loader are allocated. |
109 Mutex* _metaspace_lock; // Locks the metaspace for allocations and setup. |
109 Mutex* _metaspace_lock; // Locks the metaspace for allocations and setup. |
110 bool _unloading; // true if this class loader goes away |
110 bool _unloading; // true if this class loader goes away |
111 bool _keep_alive; // if this CLD can be unloaded for anonymous loaders |
111 bool _keep_alive; // if this CLD can be unloaded for anonymous loaders |
|
112 bool _is_anonymous; // if this CLD is for an anonymous class |
112 volatile int _claimed; // true if claimed, for example during GC traces. |
113 volatile int _claimed; // true if claimed, for example during GC traces. |
113 // To avoid applying oop closure more than once. |
114 // To avoid applying oop closure more than once. |
114 // Has to be an int because we cas it. |
115 // Has to be an int because we cas it. |
115 Klass* _klasses; // The classes defined by the class loader. |
116 Klass* _klasses; // The classes defined by the class loader. |
116 |
117 |
137 void locked_add_dependency(objArrayHandle last, objArrayHandle new_dependency); |
138 void locked_add_dependency(objArrayHandle last, objArrayHandle new_dependency); |
138 |
139 |
139 void set_next(ClassLoaderData* next) { _next = next; } |
140 void set_next(ClassLoaderData* next) { _next = next; } |
140 ClassLoaderData* next() const { return _next; } |
141 ClassLoaderData* next() const { return _next; } |
141 |
142 |
142 ClassLoaderData(Handle h_class_loader); |
143 ClassLoaderData(Handle h_class_loader, bool is_anonymous); |
143 ~ClassLoaderData(); |
144 ~ClassLoaderData(); |
144 |
145 |
145 void set_metaspace(Metaspace* m) { _metaspace = m; } |
146 void set_metaspace(Metaspace* m) { _metaspace = m; } |
146 |
147 |
147 JNIHandleBlock* handles() const; |
148 JNIHandleBlock* handles() const; |
172 |
173 |
173 static ClassLoaderData* the_null_class_loader_data() { |
174 static ClassLoaderData* the_null_class_loader_data() { |
174 return _the_null_class_loader_data; |
175 return _the_null_class_loader_data; |
175 } |
176 } |
176 |
177 |
177 bool is_anonymous() const; |
178 bool is_anonymous() const { return _is_anonymous; } |
178 |
179 |
179 static void init_null_class_loader_data() { |
180 static void init_null_class_loader_data() { |
180 assert(_the_null_class_loader_data == NULL, "cannot initialize twice"); |
181 assert(_the_null_class_loader_data == NULL, "cannot initialize twice"); |
181 assert(ClassLoaderDataGraph::_head == NULL, "cannot initialize twice"); |
182 assert(ClassLoaderDataGraph::_head == NULL, "cannot initialize twice"); |
182 _the_null_class_loader_data = new ClassLoaderData((oop)NULL); |
183 _the_null_class_loader_data = new ClassLoaderData((oop)NULL, false); |
183 ClassLoaderDataGraph::_head = _the_null_class_loader_data; |
184 ClassLoaderDataGraph::_head = _the_null_class_loader_data; |
184 assert(_the_null_class_loader_data->is_the_null_class_loader_data(), "Must be"); |
185 assert(_the_null_class_loader_data->is_the_null_class_loader_data(), "Must be"); |
185 if (DumpSharedSpaces) { |
186 if (DumpSharedSpaces) { |
186 _the_null_class_loader_data->initialize_shared_metaspaces(); |
187 _the_null_class_loader_data->initialize_shared_metaspaces(); |
187 } |
188 } |