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.
|