466 } 467 if (queue() != NULL) { 468 GCTaskQueue* unsynchronized_queue = queue()->unsynchronized_queue(); 469 GCTaskQueue::destroy(unsynchronized_queue); 470 SynchronizedGCTaskQueue::destroy(queue()); 471 _queue = NULL; 472 } 473 if (monitor() != NULL) { 474 delete monitor(); 475 _monitor = NULL; 476 } 477 } 478 479 void GCTaskManager::set_active_gang() { 480 _active_workers = 481 AdaptiveSizePolicy::calc_active_workers(workers(), 482 active_workers(), 483 Threads::number_of_non_daemon_threads()); 484 485 assert(!all_workers_active() || active_workers() == ParallelGCThreads, 486 err_msg("all_workers_active() is incorrect: " 487 "active %d ParallelGCThreads %u", active_workers(), 488 ParallelGCThreads)); 489 if (TraceDynamicGCThreads) { 490 gclog_or_tty->print_cr("GCTaskManager::set_active_gang(): " 491 "all_workers_active() %d workers %d " 492 "active %d ParallelGCThreads %u", 493 all_workers_active(), workers(), active_workers(), 494 ParallelGCThreads); 495 } 496 } 497 498 // Create IdleGCTasks for inactive workers. 499 // Creates tasks in a ResourceArea and assumes 500 // an appropriate ResourceMark. 501 void GCTaskManager::task_idle_workers() { 502 { 503 int more_inactive_workers = 0; 504 { 505 // Stop any idle tasks from exiting their IdleGCTask's 506 // and get the count for additional IdleGCTask's under 507 // the GCTaskManager's monitor so that the "more_inactive_workers" 508 // count is correct. | 466 } 467 if (queue() != NULL) { 468 GCTaskQueue* unsynchronized_queue = queue()->unsynchronized_queue(); 469 GCTaskQueue::destroy(unsynchronized_queue); 470 SynchronizedGCTaskQueue::destroy(queue()); 471 _queue = NULL; 472 } 473 if (monitor() != NULL) { 474 delete monitor(); 475 _monitor = NULL; 476 } 477 } 478 479 void GCTaskManager::set_active_gang() { 480 _active_workers = 481 AdaptiveSizePolicy::calc_active_workers(workers(), 482 active_workers(), 483 Threads::number_of_non_daemon_threads()); 484 485 assert(!all_workers_active() || active_workers() == ParallelGCThreads, 486 "all_workers_active() is incorrect: " 487 "active %d ParallelGCThreads %u", active_workers(), 488 ParallelGCThreads); 489 if (TraceDynamicGCThreads) { 490 gclog_or_tty->print_cr("GCTaskManager::set_active_gang(): " 491 "all_workers_active() %d workers %d " 492 "active %d ParallelGCThreads %u", 493 all_workers_active(), workers(), active_workers(), 494 ParallelGCThreads); 495 } 496 } 497 498 // Create IdleGCTasks for inactive workers. 499 // Creates tasks in a ResourceArea and assumes 500 // an appropriate ResourceMark. 501 void GCTaskManager::task_idle_workers() { 502 { 503 int more_inactive_workers = 0; 504 { 505 // Stop any idle tasks from exiting their IdleGCTask's 506 // and get the count for additional IdleGCTask's under 507 // the GCTaskManager's monitor so that the "more_inactive_workers" 508 // count is correct. |