src/hotspot/share/gc/g1/g1CollectedHeap.cpp
changeset 57953 d78c910f9069
parent 57903 5e2576c303a2
child 57969 6f0215981777
equal deleted inserted replaced
57952:5021d91ba9bd 57953:d78c910f9069
  1079     _hot_card_cache->reset_hot_cache();
  1079     _hot_card_cache->reset_hot_cache();
  1080   }
  1080   }
  1081 
  1081 
  1082   // Discard all remembered set updates.
  1082   // Discard all remembered set updates.
  1083   G1BarrierSet::dirty_card_queue_set().abandon_logs();
  1083   G1BarrierSet::dirty_card_queue_set().abandon_logs();
  1084   assert(G1BarrierSet::dirty_card_queue_set().num_completed_buffers() == 0,
  1084   assert(G1BarrierSet::dirty_card_queue_set().num_cards() == 0,
  1085          "DCQS should be empty");
  1085          "DCQS should be empty");
  1086 }
  1086 }
  1087 
  1087 
  1088 void G1CollectedHeap::verify_after_full_collection() {
  1088 void G1CollectedHeap::verify_after_full_collection() {
  1089   _hrm->verify_optional();
  1089   _hrm->verify_optional();
  1682   G1BarrierSet::satb_mark_queue_set().initialize(this,
  1682   G1BarrierSet::satb_mark_queue_set().initialize(this,
  1683                                                  &bs->satb_mark_queue_buffer_allocator(),
  1683                                                  &bs->satb_mark_queue_buffer_allocator(),
  1684                                                  G1SATBProcessCompletedThreshold,
  1684                                                  G1SATBProcessCompletedThreshold,
  1685                                                  G1SATBBufferEnqueueingThresholdPercent);
  1685                                                  G1SATBBufferEnqueueingThresholdPercent);
  1686 
  1686 
  1687   // process_completed_buffers_threshold and max_completed_buffers are updated
  1687   // process_cards_threshold and max_cards are updated
  1688   // later, based on the concurrent refinement object.
  1688   // later, based on the concurrent refinement object.
  1689   G1BarrierSet::dirty_card_queue_set().initialize(DirtyCardQ_CBL_mon,
  1689   G1BarrierSet::dirty_card_queue_set().initialize(DirtyCardQ_CBL_mon,
  1690                                                   &bs->dirty_card_queue_buffer_allocator(),
  1690                                                   &bs->dirty_card_queue_buffer_allocator(),
  1691                                                   true); // init_free_ids
  1691                                                   true); // init_free_ids
  1692 
  1692 
  1811     return ecode;
  1811     return ecode;
  1812   }
  1812   }
  1813 
  1813 
  1814   {
  1814   {
  1815     G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
  1815     G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
  1816     dcqs.set_process_completed_buffers_threshold(concurrent_refine()->yellow_zone());
  1816     dcqs.set_process_cards_threshold(concurrent_refine()->yellow_zone());
  1817     dcqs.set_max_completed_buffers(concurrent_refine()->red_zone());
  1817     dcqs.set_max_cards(concurrent_refine()->red_zone());
  1818   }
  1818   }
  1819 
  1819 
  1820   // Here we allocate the dummy HeapRegion that is required by the
  1820   // Here we allocate the dummy HeapRegion that is required by the
  1821   // G1AllocRegion class.
  1821   // G1AllocRegion class.
  1822   HeapRegion* dummy_region = _hrm->get_dummy_region();
  1822   HeapRegion* dummy_region = _hrm->get_dummy_region();
  1951   G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
  1951   G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
  1952   size_t n_completed_buffers = 0;
  1952   size_t n_completed_buffers = 0;
  1953   while (dcqs.apply_closure_during_gc(cl, worker_i)) {
  1953   while (dcqs.apply_closure_during_gc(cl, worker_i)) {
  1954     n_completed_buffers++;
  1954     n_completed_buffers++;
  1955   }
  1955   }
  1956   assert(dcqs.num_completed_buffers() == 0, "Completed buffers exist!");
  1956   assert(dcqs.num_cards() == 0, "Completed buffers exist!");
  1957   phase_times()->record_thread_work_item(G1GCPhaseTimes::MergeLB, worker_i, n_completed_buffers, G1GCPhaseTimes::MergeLBProcessedBuffers);
  1957   phase_times()->record_thread_work_item(G1GCPhaseTimes::MergeLB, worker_i, n_completed_buffers, G1GCPhaseTimes::MergeLBProcessedBuffers);
  1958 }
  1958 }
  1959 
  1959 
  1960 // Computes the sum of the storage used by the various regions.
  1960 // Computes the sum of the storage used by the various regions.
  1961 size_t G1CollectedHeap::used() const {
  1961 size_t G1CollectedHeap::used() const {
  2617     }
  2617     }
  2618   } count_from_threads;
  2618   } count_from_threads;
  2619   Threads::threads_do(&count_from_threads);
  2619   Threads::threads_do(&count_from_threads);
  2620 
  2620 
  2621   G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
  2621   G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
  2622   dcqs.verify_num_entries_in_completed_buffers();
  2622   dcqs.verify_num_cards();
  2623 
  2623 
  2624   return dcqs.num_entries_in_completed_buffers() + count_from_threads._cards;
  2624   return dcqs.num_cards() + count_from_threads._cards;
  2625 }
  2625 }
  2626 
  2626 
  2627 bool G1CollectedHeap::is_potential_eager_reclaim_candidate(HeapRegion* r) const {
  2627 bool G1CollectedHeap::is_potential_eager_reclaim_candidate(HeapRegion* r) const {
  2628   // We don't nominate objects with many remembered set entries, on
  2628   // We don't nominate objects with many remembered set entries, on
  2629   // the assumption that such objects are likely still live.
  2629   // the assumption that such objects are likely still live.