hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
changeset 3589 abdd970c243d
parent 3584 42c1f7bbffa4
child 3590 a268fa66d7fb
equal deleted inserted replaced
3588:57abdf957b1b 3589:abdd970c243d
  1635   return _g1_committed.byte_size();
  1635   return _g1_committed.byte_size();
  1636 }
  1636 }
  1637 
  1637 
  1638 void G1CollectedHeap::iterate_dirty_card_closure(bool concurrent,
  1638 void G1CollectedHeap::iterate_dirty_card_closure(bool concurrent,
  1639                                                  int worker_i) {
  1639                                                  int worker_i) {
       
  1640   // Clean cards in the hot card cache
       
  1641   concurrent_g1_refine()->clean_up_cache(worker_i, g1_rem_set());
       
  1642 
  1640   DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
  1643   DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
  1641   int n_completed_buffers = 0;
  1644   int n_completed_buffers = 0;
  1642   while (dcqs.apply_closure_to_completed_buffer(worker_i, 0, true)) {
  1645   while (dcqs.apply_closure_to_completed_buffer(worker_i, 0, true)) {
  1643     n_completed_buffers++;
  1646     n_completed_buffers++;
  1644   }
  1647   }
  1645   g1_policy()->record_update_rs_processed_buffers(worker_i,
  1648   g1_policy()->record_update_rs_processed_buffers(worker_i,
  1646                                                   (double) n_completed_buffers);
  1649                                                   (double) n_completed_buffers);
  1647   dcqs.clear_n_completed_buffers();
  1650   dcqs.clear_n_completed_buffers();
  1648   // Finish up the queue...
       
  1649   if (worker_i == 0) concurrent_g1_refine()->clean_up_cache(worker_i,
       
  1650                                                             g1_rem_set());
       
  1651   assert(!dcqs.completed_buffers_exist_dirty(), "Completed buffers exist!");
  1651   assert(!dcqs.completed_buffers_exist_dirty(), "Completed buffers exist!");
  1652 }
  1652 }
  1653 
  1653 
  1654 
  1654 
  1655 // Computes the sum of the storage used by the various regions.
  1655 // Computes the sum of the storage used by the various regions.
  4109 void G1CollectedHeap::evacuate_collection_set() {
  4109 void G1CollectedHeap::evacuate_collection_set() {
  4110   set_evacuation_failed(false);
  4110   set_evacuation_failed(false);
  4111 
  4111 
  4112   g1_rem_set()->prepare_for_oops_into_collection_set_do();
  4112   g1_rem_set()->prepare_for_oops_into_collection_set_do();
  4113   concurrent_g1_refine()->set_use_cache(false);
  4113   concurrent_g1_refine()->set_use_cache(false);
       
  4114   concurrent_g1_refine()->clear_hot_cache_claimed_index();
       
  4115 
  4114   int n_workers = (ParallelGCThreads > 0 ? workers()->total_workers() : 1);
  4116   int n_workers = (ParallelGCThreads > 0 ? workers()->total_workers() : 1);
  4115   set_par_threads(n_workers);
  4117   set_par_threads(n_workers);
  4116   G1ParTask g1_par_task(this, n_workers, _task_queues);
  4118   G1ParTask g1_par_task(this, n_workers, _task_queues);
  4117 
  4119 
  4118   init_for_evac_failure(NULL);
  4120   init_for_evac_failure(NULL);
  4141     G1KeepAliveClosure keep_alive(this);
  4143     G1KeepAliveClosure keep_alive(this);
  4142     JNIHandles::weak_oops_do(&is_alive, &keep_alive);
  4144     JNIHandles::weak_oops_do(&is_alive, &keep_alive);
  4143   }
  4145   }
  4144   g1_rem_set()->cleanup_after_oops_into_collection_set_do();
  4146   g1_rem_set()->cleanup_after_oops_into_collection_set_do();
  4145 
  4147 
       
  4148   concurrent_g1_refine()->clear_hot_cache();
  4146   concurrent_g1_refine()->set_use_cache(true);
  4149   concurrent_g1_refine()->set_use_cache(true);
  4147 
  4150 
  4148   finalize_for_evac_failure();
  4151   finalize_for_evac_failure();
  4149 
  4152 
  4150   // Must do this before removing self-forwarding pointers, which clears
  4153   // Must do this before removing self-forwarding pointers, which clears