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.
|
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 const char* GCTaskManager::group_name() {
403 return GCTaskThread::task_name();
404 }
405
406 void GCTaskManager::initialize() {
407 if (TraceGCTaskManager) {
408 tty->print_cr("GCTaskManager::initialize: workers: %u", workers());
409 }
410 assert(workers() != 0, "no workers");
411 _monitor = new Monitor(Mutex::barrier, // rank
412 "GCTaskManager monitor", // name
413 Mutex::_allow_vm_block_flag, // allow_vm_block
414 Monitor::_safepoint_check_never);
415 // The queue for the GCTaskManager must be a CHeapObj.
416 GCTaskQueue* unsynchronized_queue = GCTaskQueue::create_on_c_heap();
417 _queue = SynchronizedGCTaskQueue::create(unsynchronized_queue, lock());
418 _noop_task = NoopGCTask::create_on_c_heap();
419 _resource_flag = NEW_C_HEAP_ARRAY(bool, workers(), mtGC);
420 {
421 // Set up worker threads.
422 // Distribute the workers among the available processors,
423 // unless we were told not to, or if the os doesn't want to.
|