Print this page
rev 6875 : 8056240: Investigate increased GC remark time after class unloading changes in CRM Fuse
Reviewed-by: mgerdin, coleenp, bdelsart
Split |
Split |
Close |
Expand all |
Collapse all |
--- old/src/share/vm/classfile/classLoaderData.cpp
+++ new/src/share/vm/classfile/classLoaderData.cpp
1 1 /*
2 2 * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
3 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 4 *
5 5 * This code is free software; you can redistribute it and/or modify it
6 6 * under the terms of the GNU General Public License version 2 only, as
7 7 * published by the Free Software Foundation.
8 8 *
9 9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 12 * version 2 for more details (a copy is included in the LICENSE file that
13 13 * accompanied this code).
14 14 *
15 15 * You should have received a copy of the GNU General Public License version
16 16 * 2 along with this work; if not, write to the Free Software Foundation,
17 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 18 *
19 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 20 * or visit www.oracle.com if you need additional information or have any
21 21 * questions.
22 22 *
23 23 */
24 24
25 25 // A ClassLoaderData identifies the full set of class types that a class
26 26 // loader's name resolution strategy produces for a given configuration of the
27 27 // class loader.
28 28 // Class types in the ClassLoaderData may be defined by from class file binaries
29 29 // provided by the class loader, or from other class loader it interacts with
30 30 // according to its name resolution strategy.
31 31 //
32 32 // Class loaders that implement a deterministic name resolution strategy
33 33 // (including with respect to their delegation behavior), such as the boot, the
34 34 // extension, and the system loaders of the JDK's built-in class loader
35 35 // hierarchy, always produce the same linkset for a given configuration.
36 36 //
37 37 // ClassLoaderData carries information related to a linkset (e.g.,
38 38 // metaspace holding its klass definitions).
39 39 // The System Dictionary and related data structures (e.g., placeholder table,
40 40 // loader constraints table) as well as the runtime representation of classes
41 41 // only reference ClassLoaderData.
42 42 //
43 43 // Instances of java.lang.ClassLoader holds a pointer to a ClassLoaderData that
44 44 // that represent the loader's "linking domain" in the JVM.
45 45 //
46 46 // The bootstrap loader (represented by NULL) also has a ClassLoaderData,
47 47 // the singleton class the_null_class_loader_data().
48 48
49 49 #include "precompiled.hpp"
50 50 #include "classfile/classLoaderData.hpp"
51 51 #include "classfile/classLoaderData.inline.hpp"
52 52 #include "classfile/javaClasses.hpp"
53 53 #include "classfile/metadataOnStackMark.hpp"
54 54 #include "classfile/systemDictionary.hpp"
55 55 #include "code/codeCache.hpp"
56 56 #include "memory/gcLocker.hpp"
57 57 #include "memory/metadataFactory.hpp"
58 58 #include "memory/metaspaceShared.hpp"
59 59 #include "memory/oopFactory.hpp"
60 60 #include "runtime/jniHandles.hpp"
61 61 #include "runtime/mutex.hpp"
62 62 #include "runtime/safepoint.hpp"
63 63 #include "runtime/synchronizer.hpp"
64 64 #include "utilities/growableArray.hpp"
65 65 #include "utilities/macros.hpp"
66 66 #include "utilities/ostream.hpp"
67 67
68 68 #if INCLUDE_TRACE
69 69 #include "trace/tracing.hpp"
70 70 #endif
71 71
72 72 ClassLoaderData * ClassLoaderData::_the_null_class_loader_data = NULL;
73 73
74 74 ClassLoaderData::ClassLoaderData(Handle h_class_loader, bool is_anonymous, Dependencies dependencies) :
75 75 _class_loader(h_class_loader()),
76 76 _is_anonymous(is_anonymous),
77 77 // An anonymous class loader data doesn't have anything to keep
78 78 // it from being unloaded during parsing of the anonymous class.
79 79 // The null-class-loader should always be kept alive.
80 80 _keep_alive(is_anonymous || h_class_loader.is_null()),
81 81 _metaspace(NULL), _unloading(false), _klasses(NULL),
82 82 _claimed(0), _jmethod_ids(NULL), _handles(NULL), _deallocate_list(NULL),
83 83 _next(NULL), _dependencies(dependencies),
84 84 _metaspace_lock(new Mutex(Monitor::leaf+1, "Metaspace allocation lock", true)) {
85 85 // empty
86 86 }
87 87
88 88 void ClassLoaderData::init_dependencies(TRAPS) {
89 89 assert(!Universe::is_fully_initialized(), "should only be called when initializing");
90 90 assert(is_the_null_class_loader_data(), "should only call this for the null class loader");
91 91 _dependencies.init(CHECK);
92 92 }
93 93
94 94 void ClassLoaderData::Dependencies::init(TRAPS) {
95 95 // Create empty dependencies array to add to. CMS requires this to be
96 96 // an oop so that it can track additions via card marks. We think.
97 97 _list_head = oopFactory::new_objectArray(2, CHECK);
98 98 }
99 99
100 100 bool ClassLoaderData::claim() {
101 101 if (_claimed == 1) {
102 102 return false;
103 103 }
104 104
105 105 return (int) Atomic::cmpxchg(1, &_claimed, 0) == 0;
106 106 }
107 107
108 108 void ClassLoaderData::oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) {
109 109 if (must_claim && !claim()) {
110 110 return;
111 111 }
112 112
113 113 f->do_oop(&_class_loader);
114 114 _dependencies.oops_do(f);
115 115 _handles->oops_do(f);
116 116 if (klass_closure != NULL) {
117 117 classes_do(klass_closure);
118 118 }
119 119 }
120 120
121 121 void ClassLoaderData::Dependencies::oops_do(OopClosure* f) {
122 122 f->do_oop((oop*)&_list_head);
123 123 }
124 124
125 125 void ClassLoaderData::classes_do(KlassClosure* klass_closure) {
126 126 for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
127 127 klass_closure->do_klass(k);
128 128 assert(k != k->next_link(), "no loops!");
129 129 }
130 130 }
131 131
132 132 void ClassLoaderData::classes_do(void f(Klass * const)) {
133 133 for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
134 134 f(k);
135 135 }
136 136 }
137 137
138 138 void ClassLoaderData::loaded_classes_do(KlassClosure* klass_closure) {
139 139 // Lock to avoid classes being modified/added/removed during iteration
140 140 MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag);
141 141 for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
142 142 // Do not filter ArrayKlass oops here...
143 143 if (k->oop_is_array() || (k->oop_is_instance() && InstanceKlass::cast(k)->is_loaded())) {
144 144 klass_closure->do_klass(k);
145 145 }
146 146 }
147 147 }
148 148
149 149 void ClassLoaderData::classes_do(void f(InstanceKlass*)) {
150 150 for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
151 151 if (k->oop_is_instance()) {
152 152 f(InstanceKlass::cast(k));
153 153 }
154 154 assert(k != k->next_link(), "no loops!");
155 155 }
156 156 }
157 157
158 158 void ClassLoaderData::record_dependency(Klass* k, TRAPS) {
159 159 ClassLoaderData * const from_cld = this;
160 160 ClassLoaderData * const to_cld = k->class_loader_data();
161 161
162 162 // Dependency to the null class loader data doesn't need to be recorded
163 163 // because the null class loader data never goes away.
164 164 if (to_cld->is_the_null_class_loader_data()) {
165 165 return;
166 166 }
167 167
168 168 oop to;
169 169 if (to_cld->is_anonymous()) {
170 170 // Anonymous class dependencies are through the mirror.
171 171 to = k->java_mirror();
172 172 } else {
173 173 to = to_cld->class_loader();
174 174
175 175 // If from_cld is anonymous, even if it's class_loader is a parent of 'to'
176 176 // we still have to add it. The class_loader won't keep from_cld alive.
177 177 if (!from_cld->is_anonymous()) {
178 178 // Check that this dependency isn't from the same or parent class_loader
179 179 oop from = from_cld->class_loader();
180 180
181 181 oop curr = from;
182 182 while (curr != NULL) {
183 183 if (curr == to) {
184 184 return; // this class loader is in the parent list, no need to add it.
185 185 }
186 186 curr = java_lang_ClassLoader::parent(curr);
187 187 }
188 188 }
189 189 }
190 190
191 191 // It's a dependency we won't find through GC, add it. This is relatively rare
192 192 // Must handle over GC point.
193 193 Handle dependency(THREAD, to);
194 194 from_cld->_dependencies.add(dependency, CHECK);
195 195 }
196 196
197 197
198 198 void ClassLoaderData::Dependencies::add(Handle dependency, TRAPS) {
199 199 // Check first if this dependency is already in the list.
200 200 // Save a pointer to the last to add to under the lock.
201 201 objArrayOop ok = _list_head;
202 202 objArrayOop last = NULL;
203 203 while (ok != NULL) {
204 204 last = ok;
205 205 if (ok->obj_at(0) == dependency()) {
206 206 // Don't need to add it
207 207 return;
208 208 }
209 209 ok = (objArrayOop)ok->obj_at(1);
210 210 }
211 211
212 212 // Must handle over GC points
213 213 assert (last != NULL, "dependencies should be initialized");
214 214 objArrayHandle last_handle(THREAD, last);
215 215
216 216 // Create a new dependency node with fields for (class_loader or mirror, next)
217 217 objArrayOop deps = oopFactory::new_objectArray(2, CHECK);
218 218 deps->obj_at_put(0, dependency());
219 219
220 220 // Must handle over GC points
221 221 objArrayHandle new_dependency(THREAD, deps);
222 222
223 223 // Add the dependency under lock
224 224 locked_add(last_handle, new_dependency, THREAD);
225 225 }
226 226
227 227 void ClassLoaderData::Dependencies::locked_add(objArrayHandle last_handle,
228 228 objArrayHandle new_dependency,
229 229 Thread* THREAD) {
230 230
231 231 // Have to lock and put the new dependency on the end of the dependency
232 232 // array so the card mark for CMS sees that this dependency is new.
233 233 // Can probably do this lock free with some effort.
234 234 ObjectLocker ol(Handle(THREAD, _list_head), THREAD);
235 235
236 236 oop loader_or_mirror = new_dependency->obj_at(0);
237 237
238 238 // Since the dependencies are only added, add to the end.
239 239 objArrayOop end = last_handle();
240 240 objArrayOop last = NULL;
241 241 while (end != NULL) {
242 242 last = end;
243 243 // check again if another thread added it to the end.
244 244 if (end->obj_at(0) == loader_or_mirror) {
245 245 // Don't need to add it
246 246 return;
247 247 }
248 248 end = (objArrayOop)end->obj_at(1);
249 249 }
250 250 assert (last != NULL, "dependencies should be initialized");
251 251 // fill in the first element with the oop in new_dependency.
252 252 if (last->obj_at(0) == NULL) {
253 253 last->obj_at_put(0, new_dependency->obj_at(0));
254 254 } else {
255 255 last->obj_at_put(1, new_dependency());
256 256 }
257 257 }
258 258
259 259 void ClassLoaderDataGraph::clear_claimed_marks() {
260 260 for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
261 261 cld->clear_claimed();
262 262 }
263 263 }
264 264
265 265 void ClassLoaderData::add_class(Klass* k) {
266 266 MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag);
267 267 Klass* old_value = _klasses;
268 268 k->set_next_link(old_value);
269 269 // link the new item into the list
270 270 _klasses = k;
271 271
272 272 if (TraceClassLoaderData && Verbose && k->class_loader_data() != NULL) {
273 273 ResourceMark rm;
274 274 tty->print_cr("[TraceClassLoaderData] Adding k: " PTR_FORMAT " %s to CLD: "
275 275 PTR_FORMAT " loader: " PTR_FORMAT " %s",
276 276 p2i(k),
277 277 k->external_name(),
278 278 p2i(k->class_loader_data()),
279 279 p2i((void *)k->class_loader()),
280 280 loader_name());
281 281 }
282 282 }
283 283
284 284 // This is called by InstanceKlass::deallocate_contents() to remove the
285 285 // scratch_class for redefine classes. We need a lock because there it may not
286 286 // be called at a safepoint if there's an error.
287 287 void ClassLoaderData::remove_class(Klass* scratch_class) {
288 288 MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag);
289 289 Klass* prev = NULL;
290 290 for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
291 291 if (k == scratch_class) {
292 292 if (prev == NULL) {
293 293 _klasses = k->next_link();
294 294 } else {
295 295 Klass* next = k->next_link();
296 296 prev->set_next_link(next);
297 297 }
298 298 return;
299 299 }
300 300 prev = k;
301 301 assert(k != k->next_link(), "no loops!");
302 302 }
303 303 ShouldNotReachHere(); // should have found this class!!
304 304 }
305 305
306 306 void ClassLoaderData::unload() {
307 307 _unloading = true;
308 308
309 309 // Tell serviceability tools these classes are unloading
310 310 classes_do(InstanceKlass::notify_unload_class);
311 311
312 312 if (TraceClassLoaderData) {
313 313 ResourceMark rm;
314 314 tty->print("[ClassLoaderData: unload loader data " INTPTR_FORMAT, p2i(this));
315 315 tty->print(" for instance " INTPTR_FORMAT " of %s", p2i((void *)class_loader()),
316 316 loader_name());
317 317 if (is_anonymous()) {
318 318 tty->print(" for anonymous class " INTPTR_FORMAT " ", p2i(_klasses));
319 319 }
320 320 tty->print_cr("]");
321 321 }
322 322 }
323 323
324 324 #ifdef ASSERT
325 325 class AllAliveClosure : public OopClosure {
326 326 BoolObjectClosure* _is_alive_closure;
327 327 bool _found_dead;
328 328 public:
329 329 AllAliveClosure(BoolObjectClosure* is_alive_closure) : _is_alive_closure(is_alive_closure), _found_dead(false) {}
330 330 template <typename T> void do_oop_work(T* p) {
331 331 T heap_oop = oopDesc::load_heap_oop(p);
332 332 if (!oopDesc::is_null(heap_oop)) {
333 333 oop obj = oopDesc::decode_heap_oop_not_null(heap_oop);
334 334 if (!_is_alive_closure->do_object_b(obj)) {
335 335 _found_dead = true;
336 336 }
337 337 }
338 338 }
339 339 void do_oop(oop* p) { do_oop_work<oop>(p); }
340 340 void do_oop(narrowOop* p) { do_oop_work<narrowOop>(p); }
341 341 bool found_dead() { return _found_dead; }
342 342 };
343 343 #endif
344 344
345 345 oop ClassLoaderData::keep_alive_object() const {
346 346 assert(!keep_alive(), "Don't use with CLDs that are artificially kept alive");
347 347 return is_anonymous() ? _klasses->java_mirror() : class_loader();
348 348 }
349 349
350 350 bool ClassLoaderData::is_alive(BoolObjectClosure* is_alive_closure) const {
351 351 bool alive = keep_alive() // null class loader and incomplete anonymous klasses.
352 352 || is_alive_closure->do_object_b(keep_alive_object());
353 353
354 354 #ifdef ASSERT
355 355 if (alive) {
356 356 AllAliveClosure all_alive_closure(is_alive_closure);
357 357 KlassToOopClosure klass_closure(&all_alive_closure);
358 358 const_cast<ClassLoaderData*>(this)->oops_do(&all_alive_closure, &klass_closure, false);
359 359 assert(!all_alive_closure.found_dead(), err_msg("Found dead oop in alive cld: " PTR_FORMAT, p2i(this)));
360 360 }
361 361 #endif
362 362
363 363 return alive;
364 364 }
365 365
366 366
367 367 ClassLoaderData::~ClassLoaderData() {
368 368 // Release C heap structures for all the classes.
369 369 classes_do(InstanceKlass::release_C_heap_structures);
370 370
371 371 Metaspace *m = _metaspace;
372 372 if (m != NULL) {
373 373 _metaspace = NULL;
374 374 // release the metaspace
375 375 delete m;
376 376 // release the handles
377 377 if (_handles != NULL) {
378 378 JNIHandleBlock::release_block(_handles);
379 379 _handles = NULL;
380 380 }
381 381 }
382 382
383 383 // Clear all the JNI handles for methods
384 384 // These aren't deallocated and are going to look like a leak, but that's
385 385 // needed because we can't really get rid of jmethodIDs because we don't
386 386 // know when native code is going to stop using them. The spec says that
387 387 // they're "invalid" but existing programs likely rely on their being
388 388 // NULL after class unloading.
389 389 if (_jmethod_ids != NULL) {
390 390 Method::clear_jmethod_ids(this);
391 391 }
392 392 // Delete lock
393 393 delete _metaspace_lock;
394 394
395 395 // Delete free list
396 396 if (_deallocate_list != NULL) {
397 397 delete _deallocate_list;
398 398 }
399 399 }
400 400
401 401 /**
402 402 * Returns true if this class loader data is for the extension class loader.
403 403 */
404 404 bool ClassLoaderData::is_ext_class_loader_data() const {
405 405 return SystemDictionary::is_ext_class_loader(class_loader());
406 406 }
407 407
408 408 Metaspace* ClassLoaderData::metaspace_non_null() {
409 409 assert(!DumpSharedSpaces, "wrong metaspace!");
410 410 // If the metaspace has not been allocated, create a new one. Might want
411 411 // to create smaller arena for Reflection class loaders also.
412 412 // The reason for the delayed allocation is because some class loaders are
413 413 // simply for delegating with no metadata of their own.
414 414 if (_metaspace == NULL) {
415 415 MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag);
416 416 // Check again if metaspace has been allocated while we were getting this lock.
417 417 if (_metaspace != NULL) {
418 418 return _metaspace;
419 419 }
420 420 if (this == the_null_class_loader_data()) {
421 421 assert (class_loader() == NULL, "Must be");
422 422 set_metaspace(new Metaspace(_metaspace_lock, Metaspace::BootMetaspaceType));
423 423 } else if (is_anonymous()) {
424 424 if (TraceClassLoaderData && Verbose && class_loader() != NULL) {
425 425 tty->print_cr("is_anonymous: %s", class_loader()->klass()->internal_name());
426 426 }
427 427 set_metaspace(new Metaspace(_metaspace_lock, Metaspace::AnonymousMetaspaceType));
428 428 } else if (class_loader()->is_a(SystemDictionary::reflect_DelegatingClassLoader_klass())) {
429 429 if (TraceClassLoaderData && Verbose && class_loader() != NULL) {
430 430 tty->print_cr("is_reflection: %s", class_loader()->klass()->internal_name());
431 431 }
432 432 set_metaspace(new Metaspace(_metaspace_lock, Metaspace::ReflectionMetaspaceType));
433 433 } else {
434 434 set_metaspace(new Metaspace(_metaspace_lock, Metaspace::StandardMetaspaceType));
435 435 }
436 436 }
437 437 return _metaspace;
438 438 }
439 439
440 440 JNIHandleBlock* ClassLoaderData::handles() const { return _handles; }
441 441 void ClassLoaderData::set_handles(JNIHandleBlock* handles) { _handles = handles; }
442 442
443 443 jobject ClassLoaderData::add_handle(Handle h) {
444 444 MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag);
445 445 if (handles() == NULL) {
446 446 set_handles(JNIHandleBlock::allocate_block());
447 447 }
448 448 return handles()->allocate_handle(h());
449 449 }
450 450
451 451 // Add this metadata pointer to be freed when it's safe. This is only during
452 452 // class unloading because Handles might point to this metadata field.
453 453 void ClassLoaderData::add_to_deallocate_list(Metadata* m) {
454 454 // Metadata in shared region isn't deleted.
455 455 if (!m->is_shared()) {
456 456 MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag);
457 457 if (_deallocate_list == NULL) {
458 458 _deallocate_list = new (ResourceObj::C_HEAP, mtClass) GrowableArray<Metadata*>(100, true);
459 459 }
460 460 _deallocate_list->append_if_missing(m);
461 461 }
462 462 }
463 463
464 464 // Deallocate free metadata on the free list. How useful the PermGen was!
465 465 void ClassLoaderData::free_deallocate_list() {
466 466 // Don't need lock, at safepoint
467 467 assert(SafepointSynchronize::is_at_safepoint(), "only called at safepoint");
468 468 if (_deallocate_list == NULL) {
469 469 return;
470 470 }
471 471 // Go backwards because this removes entries that are freed.
472 472 for (int i = _deallocate_list->length() - 1; i >= 0; i--) {
473 473 Metadata* m = _deallocate_list->at(i);
474 474 if (!m->on_stack()) {
475 475 _deallocate_list->remove_at(i);
476 476 // There are only three types of metadata that we deallocate directly.
477 477 // Cast them so they can be used by the template function.
478 478 if (m->is_method()) {
479 479 MetadataFactory::free_metadata(this, (Method*)m);
480 480 } else if (m->is_constantPool()) {
481 481 MetadataFactory::free_metadata(this, (ConstantPool*)m);
482 482 } else if (m->is_klass()) {
483 483 MetadataFactory::free_metadata(this, (InstanceKlass*)m);
484 484 } else {
485 485 ShouldNotReachHere();
486 486 }
487 487 }
488 488 }
489 489 }
490 490
491 491 // These anonymous class loaders are to contain classes used for JSR292
492 492 ClassLoaderData* ClassLoaderData::anonymous_class_loader_data(oop loader, TRAPS) {
493 493 // Add a new class loader data to the graph.
494 494 return ClassLoaderDataGraph::add(loader, true, CHECK_NULL);
495 495 }
496 496
497 497 const char* ClassLoaderData::loader_name() {
498 498 // Handles null class loader
499 499 return SystemDictionary::loader_name(class_loader());
500 500 }
501 501
502 502 #ifndef PRODUCT
503 503 // Define to dump klasses
504 504 #undef CLD_DUMP_KLASSES
505 505
506 506 void ClassLoaderData::dump(outputStream * const out) {
507 507 ResourceMark rm;
508 508 out->print("ClassLoaderData CLD: "PTR_FORMAT", loader: "PTR_FORMAT", loader_klass: "PTR_FORMAT" %s {",
509 509 p2i(this), p2i((void *)class_loader()),
510 510 p2i(class_loader() != NULL ? class_loader()->klass() : NULL), loader_name());
511 511 if (claimed()) out->print(" claimed ");
512 512 if (is_unloading()) out->print(" unloading ");
513 513 out->print(" handles " INTPTR_FORMAT, p2i(handles()));
514 514 out->cr();
515 515 if (metaspace_or_null() != NULL) {
516 516 out->print_cr("metaspace: " INTPTR_FORMAT, p2i(metaspace_or_null()));
517 517 metaspace_or_null()->dump(out);
518 518 } else {
519 519 out->print_cr("metaspace: NULL");
520 520 }
521 521
522 522 #ifdef CLD_DUMP_KLASSES
523 523 if (Verbose) {
524 524 ResourceMark rm;
525 525 Klass* k = _klasses;
526 526 while (k != NULL) {
527 527 out->print_cr("klass "PTR_FORMAT", %s, CT: %d, MUT: %d", k, k->name()->as_C_string(),
528 528 k->has_modified_oops(), k->has_accumulated_modified_oops());
529 529 assert(k != k->next_link(), "no loops!");
530 530 k = k->next_link();
531 531 }
532 532 }
533 533 #endif // CLD_DUMP_KLASSES
534 534 #undef CLD_DUMP_KLASSES
535 535 if (_jmethod_ids != NULL) {
536 536 Method::print_jmethod_ids(this, out);
537 537 }
538 538 out->print_cr("}");
539 539 }
540 540 #endif // PRODUCT
541 541
542 542 void ClassLoaderData::verify() {
543 543 oop cl = class_loader();
544 544
545 545 guarantee(this == class_loader_data(cl) || is_anonymous(), "Must be the same");
546 546 guarantee(cl != NULL || this == ClassLoaderData::the_null_class_loader_data() || is_anonymous(), "must be");
547 547
548 548 // Verify the integrity of the allocated space.
549 549 if (metaspace_or_null() != NULL) {
550 550 metaspace_or_null()->verify();
551 551 }
552 552
553 553 for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
554 554 guarantee(k->class_loader_data() == this, "Must be the same");
555 555 k->verify();
556 556 assert(k != k->next_link(), "no loops!");
557 557 }
558 558 }
559 559
560 560 bool ClassLoaderData::contains_klass(Klass* klass) {
561 561 for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
562 562 if (k == klass) return true;
563 563 }
564 564 return false;
565 565 }
566 566
567 567
568 568 // GC root of class loader data created.
569 569 ClassLoaderData* ClassLoaderDataGraph::_head = NULL;
570 570 ClassLoaderData* ClassLoaderDataGraph::_unloading = NULL;
571 571 ClassLoaderData* ClassLoaderDataGraph::_saved_unloading = NULL;
572 572 ClassLoaderData* ClassLoaderDataGraph::_saved_head = NULL;
573 573
574 574 bool ClassLoaderDataGraph::_should_purge = false;
575 575
576 576 // Add a new class loader data node to the list. Assign the newly created
577 577 // ClassLoaderData into the java/lang/ClassLoader object as a hidden field
578 578 ClassLoaderData* ClassLoaderDataGraph::add(Handle loader, bool is_anonymous, TRAPS) {
579 579 // We need to allocate all the oops for the ClassLoaderData before allocating the
580 580 // actual ClassLoaderData object.
581 581 ClassLoaderData::Dependencies dependencies(CHECK_NULL);
582 582
583 583 No_Safepoint_Verifier no_safepoints; // we mustn't GC until we've installed the
584 584 // ClassLoaderData in the graph since the CLD
585 585 // contains unhandled oops
586 586
587 587 ClassLoaderData* cld = new ClassLoaderData(loader, is_anonymous, dependencies);
588 588
589 589
590 590 if (!is_anonymous) {
591 591 ClassLoaderData** cld_addr = java_lang_ClassLoader::loader_data_addr(loader());
592 592 // First, Atomically set it
593 593 ClassLoaderData* old = (ClassLoaderData*) Atomic::cmpxchg_ptr(cld, cld_addr, NULL);
594 594 if (old != NULL) {
595 595 delete cld;
596 596 // Returns the data.
597 597 return old;
598 598 }
599 599 }
600 600
601 601 // We won the race, and therefore the task of adding the data to the list of
602 602 // class loader data
603 603 ClassLoaderData** list_head = &_head;
604 604 ClassLoaderData* next = _head;
605 605
606 606 do {
607 607 cld->set_next(next);
608 608 ClassLoaderData* exchanged = (ClassLoaderData*)Atomic::cmpxchg_ptr(cld, list_head, next);
609 609 if (exchanged == next) {
610 610 if (TraceClassLoaderData) {
611 611 ResourceMark rm;
612 612 tty->print("[ClassLoaderData: ");
613 613 tty->print("create class loader data " INTPTR_FORMAT, p2i(cld));
614 614 tty->print(" for instance " INTPTR_FORMAT " of %s", p2i((void *)cld->class_loader()),
615 615 cld->loader_name());
616 616 tty->print_cr("]");
617 617 }
618 618 return cld;
619 619 }
620 620 next = exchanged;
621 621 } while (true);
622 622
623 623 }
624 624
625 625 void ClassLoaderDataGraph::oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) {
626 626 for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
627 627 cld->oops_do(f, klass_closure, must_claim);
628 628 }
629 629 }
630 630
631 631 void ClassLoaderDataGraph::keep_alive_oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) {
632 632 for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
633 633 if (cld->keep_alive()) {
634 634 cld->oops_do(f, klass_closure, must_claim);
635 635 }
636 636 }
637 637 }
638 638
639 639 void ClassLoaderDataGraph::always_strong_oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) {
640 640 if (ClassUnloading) {
641 641 keep_alive_oops_do(f, klass_closure, must_claim);
642 642 } else {
643 643 oops_do(f, klass_closure, must_claim);
644 644 }
645 645 }
646 646
647 647 void ClassLoaderDataGraph::cld_do(CLDClosure* cl) {
648 648 for (ClassLoaderData* cld = _head; cl != NULL && cld != NULL; cld = cld->next()) {
649 649 cl->do_cld(cld);
650 650 }
651 651 }
652 652
653 653 void ClassLoaderDataGraph::roots_cld_do(CLDClosure* strong, CLDClosure* weak) {
654 654 for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->_next) {
655 655 CLDClosure* closure = cld->keep_alive() ? strong : weak;
656 656 if (closure != NULL) {
657 657 closure->do_cld(cld);
658 658 }
659 659 }
660 660 }
661 661
662 662 void ClassLoaderDataGraph::keep_alive_cld_do(CLDClosure* cl) {
663 663 roots_cld_do(cl, NULL);
664 664 }
665 665
666 666 void ClassLoaderDataGraph::always_strong_cld_do(CLDClosure* cl) {
667 667 if (ClassUnloading) {
668 668 keep_alive_cld_do(cl);
669 669 } else {
670 670 cld_do(cl);
671 671 }
672 672 }
673 673
674 674 void ClassLoaderDataGraph::classes_do(KlassClosure* klass_closure) {
675 675 for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
676 676 cld->classes_do(klass_closure);
677 677 }
678 678 }
679 679
680 680 void ClassLoaderDataGraph::classes_do(void f(Klass* const)) {
681 681 for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
682 682 cld->classes_do(f);
683 683 }
684 684 }
685 685
686 686 void ClassLoaderDataGraph::loaded_classes_do(KlassClosure* klass_closure) {
687 687 for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
688 688 cld->loaded_classes_do(klass_closure);
689 689 }
690 690 }
691 691
692 692 void ClassLoaderDataGraph::classes_unloading_do(void f(Klass* const)) {
693 693 assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
694 694 // Only walk the head until any clds not purged from prior unloading
695 695 // (CMS doesn't purge right away).
696 696 for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) {
697 697 cld->classes_do(f);
698 698 }
699 699 }
700 700
701 701 GrowableArray<ClassLoaderData*>* ClassLoaderDataGraph::new_clds() {
702 702 assert(_head == NULL || _saved_head != NULL, "remember_new_clds(true) not called?");
703 703
704 704 GrowableArray<ClassLoaderData*>* array = new GrowableArray<ClassLoaderData*>();
705 705
706 706 // The CLDs in [_head, _saved_head] were all added during last call to remember_new_clds(true);
707 707 ClassLoaderData* curr = _head;
708 708 while (curr != _saved_head) {
709 709 if (!curr->claimed()) {
710 710 array->push(curr);
711 711
712 712 if (TraceClassLoaderData) {
713 713 tty->print("[ClassLoaderData] found new CLD: ");
714 714 curr->print_value_on(tty);
715 715 tty->cr();
716 716 }
717 717 }
718 718
719 719 curr = curr->_next;
720 720 }
721 721
722 722 return array;
723 723 }
724 724
725 725 bool ClassLoaderDataGraph::unload_list_contains(const void* x) {
726 726 assert(SafepointSynchronize::is_at_safepoint(), "only safe to call at safepoint");
727 727 for (ClassLoaderData* cld = _unloading; cld != NULL; cld = cld->next()) {
728 728 if (cld->metaspace_or_null() != NULL && cld->metaspace_or_null()->contains(x)) {
729 729 return true;
730 730 }
731 731 }
732 732 return false;
733 733 }
734 734
735 735 #ifndef PRODUCT
736 736 bool ClassLoaderDataGraph::contains_loader_data(ClassLoaderData* loader_data) {
737 737 for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
738 738 if (loader_data == data) {
739 739 return true;
↓ open down ↓ |
739 lines elided |
↑ open up ↑ |
740 740 }
741 741 }
742 742
743 743 return false;
744 744 }
745 745 #endif // PRODUCT
746 746
747 747
748 748 // Move class loader data from main list to the unloaded list for unloading
749 749 // and deallocation later.
750 -bool ClassLoaderDataGraph::do_unloading(BoolObjectClosure* is_alive_closure) {
750 +bool ClassLoaderDataGraph::do_unloading(BoolObjectClosure* is_alive_closure, bool clean_alive) {
751 751 ClassLoaderData* data = _head;
752 752 ClassLoaderData* prev = NULL;
753 753 bool seen_dead_loader = false;
754 754
755 755 // Save previous _unloading pointer for CMS which may add to unloading list before
756 756 // purging and we don't want to rewalk the previously unloaded class loader data.
757 757 _saved_unloading = _unloading;
758 758
759 - // mark metadata seen on the stack and code cache so we can delete
760 - // unneeded entries.
761 - bool has_redefined_a_class = JvmtiExport::has_redefined_a_class();
762 - MetadataOnStackMark md_on_stack;
763 759 while (data != NULL) {
764 760 if (data->is_alive(is_alive_closure)) {
765 - if (has_redefined_a_class) {
766 - data->classes_do(InstanceKlass::purge_previous_versions);
767 - }
768 - data->free_deallocate_list();
769 761 prev = data;
770 762 data = data->next();
771 763 continue;
772 764 }
773 765 seen_dead_loader = true;
774 766 ClassLoaderData* dead = data;
775 767 dead->unload();
776 768 data = data->next();
777 769 // Remove from loader list.
778 770 // This class loader data will no longer be found
779 771 // in the ClassLoaderDataGraph.
↓ open down ↓ |
1 lines elided |
↑ open up ↑ |
780 772 if (prev != NULL) {
781 773 prev->set_next(data);
782 774 } else {
783 775 assert(dead == _head, "sanity check");
784 776 _head = data;
785 777 }
786 778 dead->set_next(_unloading);
787 779 _unloading = dead;
788 780 }
789 781
782 + if (clean_alive) {
783 + // Clean previous versions and the deallocate list.
784 + ClassLoaderDataGraph::clean_metaspaces();
785 + }
786 +
790 787 if (seen_dead_loader) {
791 788 post_class_unload_events();
792 789 }
793 790
794 791 return seen_dead_loader;
795 792 }
796 793
794 +void ClassLoaderDataGraph::clean_metaspaces() {
795 + // mark metadata seen on the stack and code cache so we can delete unneeded entries.
796 + bool has_redefined_a_class = JvmtiExport::has_redefined_a_class();
797 + MetadataOnStackMark md_on_stack(has_redefined_a_class);
798 +
799 + if (has_redefined_a_class) {
800 + // purge_previous_versions also cleans weak method links. Because
801 + // one method's MDO can reference another method from another
802 + // class loader, we need to first clean weak method links for all
803 + // class loaders here. Below, we can then free redefined methods
804 + // for all class loaders.
805 + for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
806 + data->classes_do(InstanceKlass::purge_previous_versions);
807 + }
808 + }
809 +
810 + // Need to purge the previous version before deallocating.
811 + free_deallocate_lists();
812 +}
813 +
797 814 void ClassLoaderDataGraph::purge() {
798 815 assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
799 816 ClassLoaderData* list = _unloading;
800 817 _unloading = NULL;
801 818 ClassLoaderData* next = list;
802 819 while (next != NULL) {
803 820 ClassLoaderData* purge_me = next;
804 821 next = purge_me->next();
805 822 delete purge_me;
806 823 }
807 824 Metaspace::purge();
808 825 }
809 826
810 827 void ClassLoaderDataGraph::post_class_unload_events(void) {
811 828 #if INCLUDE_TRACE
812 829 assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
813 830 if (Tracing::enabled()) {
↓ open down ↓ |
7 lines elided |
↑ open up ↑ |
814 831 if (Tracing::is_event_enabled(TraceClassUnloadEvent)) {
815 832 assert(_unloading != NULL, "need class loader data unload list!");
816 833 _class_unload_time = Ticks::now();
817 834 classes_unloading_do(&class_unload_event);
818 835 }
819 836 Tracing::on_unloading_classes();
820 837 }
821 838 #endif
822 839 }
823 840
841 +void ClassLoaderDataGraph::free_deallocate_lists() {
842 + for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
843 + // We need to keep this data until InstanceKlass::purge_previous_version has been
844 + // called on all alive classes. See the comment in ClassLoaderDataGraph::clean_metaspaces.
845 + cld->free_deallocate_list();
846 + }
847 +}
848 +
824 849 // CDS support
825 850
826 851 // Global metaspaces for writing information to the shared archive. When
827 852 // application CDS is supported, we may need one per metaspace, so this
828 853 // sort of looks like it.
829 854 Metaspace* ClassLoaderData::_ro_metaspace = NULL;
830 855 Metaspace* ClassLoaderData::_rw_metaspace = NULL;
831 856 static bool _shared_metaspaces_initialized = false;
832 857
833 858 // Initialize shared metaspaces (change to call from somewhere not lazily)
834 859 void ClassLoaderData::initialize_shared_metaspaces() {
835 860 assert(DumpSharedSpaces, "only use this for dumping shared spaces");
836 861 assert(this == ClassLoaderData::the_null_class_loader_data(),
837 862 "only supported for null loader data for now");
838 863 assert (!_shared_metaspaces_initialized, "only initialize once");
839 864 MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag);
840 865 _ro_metaspace = new Metaspace(_metaspace_lock, Metaspace::ROMetaspaceType);
841 866 _rw_metaspace = new Metaspace(_metaspace_lock, Metaspace::ReadWriteMetaspaceType);
842 867 _shared_metaspaces_initialized = true;
843 868 }
844 869
845 870 Metaspace* ClassLoaderData::ro_metaspace() {
846 871 assert(_ro_metaspace != NULL, "should already be initialized");
847 872 return _ro_metaspace;
848 873 }
849 874
850 875 Metaspace* ClassLoaderData::rw_metaspace() {
851 876 assert(_rw_metaspace != NULL, "should already be initialized");
852 877 return _rw_metaspace;
853 878 }
854 879
855 880 ClassLoaderDataGraphKlassIteratorAtomic::ClassLoaderDataGraphKlassIteratorAtomic()
856 881 : _next_klass(NULL) {
857 882 ClassLoaderData* cld = ClassLoaderDataGraph::_head;
858 883 Klass* klass = NULL;
859 884
860 885 // Find the first klass in the CLDG.
861 886 while (cld != NULL) {
862 887 klass = cld->_klasses;
863 888 if (klass != NULL) {
864 889 _next_klass = klass;
865 890 return;
866 891 }
867 892 cld = cld->next();
868 893 }
869 894 }
870 895
871 896 Klass* ClassLoaderDataGraphKlassIteratorAtomic::next_klass_in_cldg(Klass* klass) {
872 897 Klass* next = klass->next_link();
873 898 if (next != NULL) {
874 899 return next;
875 900 }
876 901
877 902 // No more klasses in the current CLD. Time to find a new CLD.
878 903 ClassLoaderData* cld = klass->class_loader_data();
879 904 while (next == NULL) {
880 905 cld = cld->next();
881 906 if (cld == NULL) {
882 907 break;
883 908 }
884 909 next = cld->_klasses;
885 910 }
886 911
887 912 return next;
888 913 }
889 914
890 915 Klass* ClassLoaderDataGraphKlassIteratorAtomic::next_klass() {
891 916 Klass* head = (Klass*)_next_klass;
892 917
893 918 while (head != NULL) {
894 919 Klass* next = next_klass_in_cldg(head);
895 920
896 921 Klass* old_head = (Klass*)Atomic::cmpxchg_ptr(next, &_next_klass, head);
897 922
898 923 if (old_head == head) {
899 924 return head; // Won the CAS.
900 925 }
901 926
902 927 head = old_head;
903 928 }
904 929
905 930 // Nothing more for the iterator to hand out.
906 931 assert(head == NULL, err_msg("head is " PTR_FORMAT ", expected not null:", p2i(head)));
907 932 return NULL;
908 933 }
909 934
910 935 ClassLoaderDataGraphMetaspaceIterator::ClassLoaderDataGraphMetaspaceIterator() {
911 936 _data = ClassLoaderDataGraph::_head;
912 937 }
913 938
914 939 ClassLoaderDataGraphMetaspaceIterator::~ClassLoaderDataGraphMetaspaceIterator() {}
915 940
916 941 #ifndef PRODUCT
917 942 // callable from debugger
918 943 extern "C" int print_loader_data_graph() {
919 944 ClassLoaderDataGraph::dump_on(tty);
920 945 return 0;
921 946 }
922 947
923 948 void ClassLoaderDataGraph::verify() {
924 949 for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
925 950 data->verify();
926 951 }
927 952 }
928 953
929 954 void ClassLoaderDataGraph::dump_on(outputStream * const out) {
930 955 for (ClassLoaderData* data = _head; data != NULL; data = data->next()) {
931 956 data->dump(out);
932 957 }
933 958 MetaspaceAux::dump(out);
934 959 }
935 960 #endif // PRODUCT
936 961
937 962 void ClassLoaderData::print_value_on(outputStream* out) const {
938 963 if (class_loader() == NULL) {
939 964 out->print("NULL class_loader");
940 965 } else {
941 966 out->print("class loader " INTPTR_FORMAT, p2i(this));
942 967 class_loader()->print_value_on(out);
943 968 }
944 969 }
945 970
946 971 #if INCLUDE_TRACE
947 972
948 973 Ticks ClassLoaderDataGraph::_class_unload_time;
949 974
950 975 void ClassLoaderDataGraph::class_unload_event(Klass* const k) {
951 976
952 977 // post class unload event
953 978 EventClassUnload event(UNTIMED);
954 979 event.set_endtime(_class_unload_time);
955 980 event.set_unloadedClass(k);
956 981 oop defining_class_loader = k->class_loader();
957 982 event.set_definingClassLoader(defining_class_loader != NULL ?
958 983 defining_class_loader->klass() : (Klass*)NULL);
959 984 event.commit();
960 985 }
961 986
962 987 #endif /* INCLUDE_TRACE */
↓ open down ↓ |
129 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX