324 MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
325 CodeCache::print_internals();
326 }
327
328 if (PrintVtableStats) {
329 klassVtable::print_statistics();
330 klassItable::print_statistics();
331 }
332 if (VerifyOops) {
333 tty->print_cr("+VerifyOops count: %d", StubRoutines::verify_oop_count());
334 }
335
336 print_bytecode_count();
337 if (PrintMallocStatistics) {
338 tty->print("allocation stats: ");
339 alloc_stats.print();
340 tty->cr();
341 }
342
343 if (PrintSystemDictionaryAtExit) {
344 SystemDictionary::print();
345 }
346
347 if (LogTouchedMethods && PrintTouchedMethodsAtExit) {
348 Method::print_touched_methods(tty);
349 }
350
351 if (PrintBiasedLockingStatistics) {
352 BiasedLocking::print_counters();
353 }
354
355 // Native memory tracking data
356 if (PrintNMTStatistics) {
357 MemTracker::final_report(tty);
358 }
359
360 ThreadsSMRSupport::log_statistics();
361 }
362
363 #else // PRODUCT MODE STATISTICS
364
466 // PeriodicTasks to reduce the likelihood of races.
467 if (PeriodicTask::num_tasks() > 0) {
468 WatcherThread::stop();
469 }
470
471 // shut down the StatSampler task
472 StatSampler::disengage();
473 StatSampler::destroy();
474
475 // Stop concurrent GC threads
476 Universe::heap()->stop();
477
478 // Print GC/heap related information.
479 Log(gc, heap, exit) log;
480 if (log.is_info()) {
481 ResourceMark rm;
482 LogStream ls_info(log.info());
483 Universe::print_on(&ls_info);
484 if (log.is_trace()) {
485 LogStream ls_trace(log.trace());
486 ClassLoaderDataGraph::dump_on(&ls_trace);
487 }
488 }
489
490 if (PrintBytecodeHistogram) {
491 BytecodeHistogram::print();
492 }
493
494 if (JvmtiExport::should_post_thread_life()) {
495 JvmtiExport::post_thread_end(thread);
496 }
497
498 // Always call even when there are not JVMTI environments yet, since environments
499 // may be attached late and JVMTI must track phases of VM execution
500 JvmtiExport::post_vm_death();
501 Threads::shutdown_vm_agents();
502
503 // Terminate the signal thread
504 // Note: we don't wait until it actually dies.
505 os::terminate_signal_thread();
506
|
324 MutexLockerEx mu(CodeCache_lock, Mutex::_no_safepoint_check_flag);
325 CodeCache::print_internals();
326 }
327
328 if (PrintVtableStats) {
329 klassVtable::print_statistics();
330 klassItable::print_statistics();
331 }
332 if (VerifyOops) {
333 tty->print_cr("+VerifyOops count: %d", StubRoutines::verify_oop_count());
334 }
335
336 print_bytecode_count();
337 if (PrintMallocStatistics) {
338 tty->print("allocation stats: ");
339 alloc_stats.print();
340 tty->cr();
341 }
342
343 if (PrintSystemDictionaryAtExit) {
344 ResourceMark rm;
345 SystemDictionary::print();
346 ClassLoaderDataGraph::print();
347 }
348
349 if (LogTouchedMethods && PrintTouchedMethodsAtExit) {
350 Method::print_touched_methods(tty);
351 }
352
353 if (PrintBiasedLockingStatistics) {
354 BiasedLocking::print_counters();
355 }
356
357 // Native memory tracking data
358 if (PrintNMTStatistics) {
359 MemTracker::final_report(tty);
360 }
361
362 ThreadsSMRSupport::log_statistics();
363 }
364
365 #else // PRODUCT MODE STATISTICS
366
468 // PeriodicTasks to reduce the likelihood of races.
469 if (PeriodicTask::num_tasks() > 0) {
470 WatcherThread::stop();
471 }
472
473 // shut down the StatSampler task
474 StatSampler::disengage();
475 StatSampler::destroy();
476
477 // Stop concurrent GC threads
478 Universe::heap()->stop();
479
480 // Print GC/heap related information.
481 Log(gc, heap, exit) log;
482 if (log.is_info()) {
483 ResourceMark rm;
484 LogStream ls_info(log.info());
485 Universe::print_on(&ls_info);
486 if (log.is_trace()) {
487 LogStream ls_trace(log.trace());
488 ClassLoaderDataGraph::print_on(&ls_trace);
489 }
490 }
491
492 if (PrintBytecodeHistogram) {
493 BytecodeHistogram::print();
494 }
495
496 if (JvmtiExport::should_post_thread_life()) {
497 JvmtiExport::post_thread_end(thread);
498 }
499
500 // Always call even when there are not JVMTI environments yet, since environments
501 // may be attached late and JVMTI must track phases of VM execution
502 JvmtiExport::post_vm_death();
503 Threads::shutdown_vm_agents();
504
505 // Terminate the signal thread
506 // Note: we don't wait until it actually dies.
507 os::terminate_signal_thread();
508
|