< prev index next >

src/share/vm/gc/parallel/gcTaskManager.cpp

Print this page
rev 11508 : [mq]: 8157240


 369 
 370 //
 371 // GCTaskManager
 372 //
 373 GCTaskManager::GCTaskManager(uint workers) :
 374   _workers(workers),
 375   _active_workers(0),
 376   _idle_workers(0),
 377   _created_workers(0) {
 378   initialize();
 379 }
 380 
 381 GCTaskThread* GCTaskManager::install_worker(uint t) {
 382   GCTaskThread* new_worker = GCTaskThread::create(this, t, _processor_assignment[t]);
 383   set_thread(t, new_worker);
 384   return new_worker;
 385 }
 386 
 387 void GCTaskManager::add_workers(bool initializing) {
 388   os::ThreadType worker_type = os::pgc_thread;


 389   _created_workers = WorkerManager::add_workers(this,
 390                                                 _active_workers,
 391                                                 (uint) _workers,
 392                                                 _created_workers,
 393                                                 worker_type,
 394                                                 initializing);
 395   _active_workers = MIN2(_created_workers, _active_workers);










 396 }
 397 
 398 void GCTaskManager::initialize() {
 399   if (TraceGCTaskManager) {
 400     tty->print_cr("GCTaskManager::initialize: workers: %u", workers());
 401   }
 402   assert(workers() != 0, "no workers");
 403   _monitor = new Monitor(Mutex::barrier,                // rank
 404                          "GCTaskManager monitor",       // name
 405                          Mutex::_allow_vm_block_flag,   // allow_vm_block
 406                          Monitor::_safepoint_check_never);
 407   // The queue for the GCTaskManager must be a CHeapObj.
 408   GCTaskQueue* unsynchronized_queue = GCTaskQueue::create_on_c_heap();
 409   _queue = SynchronizedGCTaskQueue::create(unsynchronized_queue, lock());
 410   _noop_task = NoopGCTask::create_on_c_heap();
 411   _resource_flag = NEW_C_HEAP_ARRAY(bool, workers(), mtGC);
 412   {
 413     // Set up worker threads.
 414     //     Distribute the workers among the available processors,
 415     //     unless we were told not to, or if the os doesn't want to.




 369 
 370 //
 371 // GCTaskManager
 372 //
 373 GCTaskManager::GCTaskManager(uint workers) :
 374   _workers(workers),
 375   _active_workers(0),
 376   _idle_workers(0),
 377   _created_workers(0) {
 378   initialize();
 379 }
 380 
 381 GCTaskThread* GCTaskManager::install_worker(uint t) {
 382   GCTaskThread* new_worker = GCTaskThread::create(this, t, _processor_assignment[t]);
 383   set_thread(t, new_worker);
 384   return new_worker;
 385 }
 386 
 387 void GCTaskManager::add_workers(bool initializing) {
 388   os::ThreadType worker_type = os::pgc_thread;
 389   uint previous_created_workers = _created_workers;
 390 
 391   _created_workers = WorkerManager::add_workers(this,
 392                                                 _active_workers,
 393                                                 (uint) _workers,
 394                                                 _created_workers,
 395                                                 worker_type,
 396                                                 initializing);
 397   _active_workers = MIN2(_created_workers, _active_workers);
 398 
 399   WorkerManager::log_worker_creation(this, previous_created_workers, _active_workers, _created_workers, initializing);
 400 }
 401 
 402 char *GCTaskManager::worker_name(uint which) {
 403   if (thread(which) != NULL) {
 404     return thread(which)->name();
 405   } else {
 406     return NULL;
 407   }
 408 }
 409 
 410 void GCTaskManager::initialize() {
 411   if (TraceGCTaskManager) {
 412     tty->print_cr("GCTaskManager::initialize: workers: %u", workers());
 413   }
 414   assert(workers() != 0, "no workers");
 415   _monitor = new Monitor(Mutex::barrier,                // rank
 416                          "GCTaskManager monitor",       // name
 417                          Mutex::_allow_vm_block_flag,   // allow_vm_block
 418                          Monitor::_safepoint_check_never);
 419   // The queue for the GCTaskManager must be a CHeapObj.
 420   GCTaskQueue* unsynchronized_queue = GCTaskQueue::create_on_c_heap();
 421   _queue = SynchronizedGCTaskQueue::create(unsynchronized_queue, lock());
 422   _noop_task = NoopGCTask::create_on_c_heap();
 423   _resource_flag = NEW_C_HEAP_ARRAY(bool, workers(), mtGC);
 424   {
 425     // Set up worker threads.
 426     //     Distribute the workers among the available processors,
 427     //     unless we were told not to, or if the os doesn't want to.


< prev index next >