< prev index next >

src/hotspot/share/gc/g1/g1CollectedHeap.cpp

Print this page




3360 };
3361 
3362 void G1CollectedHeap::string_dedup_cleaning(BoolObjectClosure* is_alive,
3363                                             OopClosure* keep_alive,
3364                                             G1GCPhaseTimes* phase_times) {
3365   G1StringDedupCleaningTask cl(is_alive, keep_alive, phase_times);
3366   workers()->run_task(&cl);
3367 }
3368 
3369 class G1RedirtyLoggedCardsTask : public AbstractGangTask {
3370  private:
3371   G1RedirtyCardsQueueSet* _qset;
3372   G1CollectedHeap* _g1h;
3373   BufferNode* volatile _nodes;
3374 
3375   void par_apply(RedirtyLoggedCardTableEntryClosure* cl, uint worker_id) {
3376     size_t buffer_size = _qset->buffer_size();
3377     BufferNode* next = Atomic::load(&_nodes);
3378     while (next != NULL) {
3379       BufferNode* node = next;
3380       next = Atomic::cmpxchg(node->next(), &_nodes, node);
3381       if (next == node) {
3382         cl->apply_to_buffer(node, buffer_size, worker_id);
3383         next = node->next();
3384       }
3385     }
3386   }
3387 
3388  public:
3389   G1RedirtyLoggedCardsTask(G1RedirtyCardsQueueSet* qset, G1CollectedHeap* g1h) :
3390     AbstractGangTask("Redirty Cards"),
3391     _qset(qset), _g1h(g1h), _nodes(qset->all_completed_buffers()) { }
3392 
3393   virtual void work(uint worker_id) {
3394     G1GCPhaseTimes* p = _g1h->phase_times();
3395     G1GCParPhaseTimesTracker x(p, G1GCPhaseTimes::RedirtyCards, worker_id);
3396 
3397     RedirtyLoggedCardTableEntryClosure cl(_g1h);
3398     par_apply(&cl, worker_id);
3399 
3400     p->record_thread_work_item(G1GCPhaseTimes::RedirtyCards, worker_id, cl.num_dirtied());




3360 };
3361 
3362 void G1CollectedHeap::string_dedup_cleaning(BoolObjectClosure* is_alive,
3363                                             OopClosure* keep_alive,
3364                                             G1GCPhaseTimes* phase_times) {
3365   G1StringDedupCleaningTask cl(is_alive, keep_alive, phase_times);
3366   workers()->run_task(&cl);
3367 }
3368 
3369 class G1RedirtyLoggedCardsTask : public AbstractGangTask {
3370  private:
3371   G1RedirtyCardsQueueSet* _qset;
3372   G1CollectedHeap* _g1h;
3373   BufferNode* volatile _nodes;
3374 
3375   void par_apply(RedirtyLoggedCardTableEntryClosure* cl, uint worker_id) {
3376     size_t buffer_size = _qset->buffer_size();
3377     BufferNode* next = Atomic::load(&_nodes);
3378     while (next != NULL) {
3379       BufferNode* node = next;
3380       next = Atomic::cmpxchg(&_nodes, node, node->next());
3381       if (next == node) {
3382         cl->apply_to_buffer(node, buffer_size, worker_id);
3383         next = node->next();
3384       }
3385     }
3386   }
3387 
3388  public:
3389   G1RedirtyLoggedCardsTask(G1RedirtyCardsQueueSet* qset, G1CollectedHeap* g1h) :
3390     AbstractGangTask("Redirty Cards"),
3391     _qset(qset), _g1h(g1h), _nodes(qset->all_completed_buffers()) { }
3392 
3393   virtual void work(uint worker_id) {
3394     G1GCPhaseTimes* p = _g1h->phase_times();
3395     G1GCParPhaseTimesTracker x(p, G1GCPhaseTimes::RedirtyCards, worker_id);
3396 
3397     RedirtyLoggedCardTableEntryClosure cl(_g1h);
3398     par_apply(&cl, worker_id);
3399 
3400     p->record_thread_work_item(G1GCPhaseTimes::RedirtyCards, worker_id, cl.num_dirtied());


< prev index next >