hotspot/src/share/vm/gc_implementation/g1/concurrentG1Refine.cpp
changeset 23855 c4574075402c
parent 22551 9bf46d16dcc6
child 24104 febf9363fb68
equal deleted inserted replaced
23853:3e1633ff6996 23855:c4574075402c
    55 
    55 
    56   reset_threshold_step();
    56   reset_threshold_step();
    57 
    57 
    58   _threads = NEW_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _n_threads, mtGC);
    58   _threads = NEW_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _n_threads, mtGC);
    59 
    59 
    60   int worker_id_offset = (int)DirtyCardQueueSet::num_par_ids();
    60   uint worker_id_offset = DirtyCardQueueSet::num_par_ids();
    61 
    61 
    62   ConcurrentG1RefineThread *next = NULL;
    62   ConcurrentG1RefineThread *next = NULL;
    63   for (int i = _n_threads - 1; i >= 0; i--) {
    63   for (uint i = _n_threads - 1; i != UINT_MAX; i--) {
    64     ConcurrentG1RefineThread* t = new ConcurrentG1RefineThread(this, next, worker_id_offset, i);
    64     ConcurrentG1RefineThread* t = new ConcurrentG1RefineThread(this, next, worker_id_offset, i);
    65     assert(t != NULL, "Conc refine should have been created");
    65     assert(t != NULL, "Conc refine should have been created");
    66     if (t->osthread() == NULL) {
    66     if (t->osthread() == NULL) {
    67         vm_shutdown_during_initialization("Could not create ConcurrentG1RefineThread");
    67         vm_shutdown_during_initialization("Could not create ConcurrentG1RefineThread");
    68     }
    68     }
    85   _hot_card_cache.initialize();
    85   _hot_card_cache.initialize();
    86 }
    86 }
    87 
    87 
    88 void ConcurrentG1Refine::stop() {
    88 void ConcurrentG1Refine::stop() {
    89   if (_threads != NULL) {
    89   if (_threads != NULL) {
    90     for (int i = 0; i < _n_threads; i++) {
    90     for (uint i = 0; i < _n_threads; i++) {
    91       _threads[i]->stop();
    91       _threads[i]->stop();
    92     }
    92     }
    93   }
    93   }
    94 }
    94 }
    95 
    95 
    96 void ConcurrentG1Refine::reinitialize_threads() {
    96 void ConcurrentG1Refine::reinitialize_threads() {
    97   reset_threshold_step();
    97   reset_threshold_step();
    98   if (_threads != NULL) {
    98   if (_threads != NULL) {
    99     for (int i = 0; i < _n_threads; i++) {
    99     for (uint i = 0; i < _n_threads; i++) {
   100       _threads[i]->initialize();
   100       _threads[i]->initialize();
   101     }
   101     }
   102   }
   102   }
   103 }
   103 }
   104 
   104 
   105 ConcurrentG1Refine::~ConcurrentG1Refine() {
   105 ConcurrentG1Refine::~ConcurrentG1Refine() {
   106   if (_threads != NULL) {
   106   if (_threads != NULL) {
   107     for (int i = 0; i < _n_threads; i++) {
   107     for (uint i = 0; i < _n_threads; i++) {
   108       delete _threads[i];
   108       delete _threads[i];
   109     }
   109     }
   110     FREE_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _threads, mtGC);
   110     FREE_C_HEAP_ARRAY(ConcurrentG1RefineThread*, _threads, mtGC);
   111   }
   111   }
   112 }
   112 }
   113 
   113 
   114 void ConcurrentG1Refine::threads_do(ThreadClosure *tc) {
   114 void ConcurrentG1Refine::threads_do(ThreadClosure *tc) {
   115   if (_threads != NULL) {
   115   if (_threads != NULL) {
   116     for (int i = 0; i < _n_threads; i++) {
   116     for (uint i = 0; i < _n_threads; i++) {
   117       tc->do_thread(_threads[i]);
   117       tc->do_thread(_threads[i]);
   118     }
   118     }
   119   }
   119   }
   120 }
   120 }
   121 
   121 
   122 void ConcurrentG1Refine::worker_threads_do(ThreadClosure * tc) {
   122 void ConcurrentG1Refine::worker_threads_do(ThreadClosure * tc) {
   123   if (_threads != NULL) {
   123   if (_threads != NULL) {
   124     for (int i = 0; i < worker_thread_num(); i++) {
   124     for (uint i = 0; i < worker_thread_num(); i++) {
   125       tc->do_thread(_threads[i]);
   125       tc->do_thread(_threads[i]);
   126     }
   126     }
   127   }
   127   }
   128 }
   128 }
   129 
   129 
   130 int ConcurrentG1Refine::thread_num() {
   130 uint ConcurrentG1Refine::thread_num() {
   131   int n_threads = (G1ConcRefinementThreads > 0) ? G1ConcRefinementThreads
   131   uint n_threads = (G1ConcRefinementThreads > 0) ? G1ConcRefinementThreads
   132                                                 : ParallelGCThreads;
   132                                                 : ParallelGCThreads;
   133   return MAX2<int>(n_threads, 1);
   133   return MAX2<uint>(n_threads, 1);
   134 }
   134 }
   135 
   135 
   136 void ConcurrentG1Refine::print_worker_threads_on(outputStream* st) const {
   136 void ConcurrentG1Refine::print_worker_threads_on(outputStream* st) const {
   137   for (int i = 0; i < _n_threads; ++i) {
   137   for (uint i = 0; i < _n_threads; ++i) {
   138     _threads[i]->print_on(st);
   138     _threads[i]->print_on(st);
   139     st->cr();
   139     st->cr();
   140   }
   140   }
   141 }
   141 }
   142 
   142