src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp
changeset 50752 9d62da00bf15
parent 50635 5d3c5af82654
child 51292 0538a5cdb474
equal deleted inserted replaced
50751:d9132bdf6c30 50752:9d62da00bf15
  2465 bool ConcurrentMarkSweepGeneration::no_allocs_since_save_marks() {
  2465 bool ConcurrentMarkSweepGeneration::no_allocs_since_save_marks() {
  2466   return cmsSpace()->no_allocs_since_save_marks();
  2466   return cmsSpace()->no_allocs_since_save_marks();
  2467 }
  2467 }
  2468 
  2468 
  2469 void
  2469 void
  2470 ConcurrentMarkSweepGeneration::oop_iterate(ExtendedOopClosure* cl) {
  2470 ConcurrentMarkSweepGeneration::oop_iterate(OopIterateClosure* cl) {
  2471   if (freelistLock()->owned_by_self()) {
  2471   if (freelistLock()->owned_by_self()) {
  2472     Generation::oop_iterate(cl);
  2472     Generation::oop_iterate(cl);
  2473   } else {
  2473   } else {
  2474     MutexLockerEx x(freelistLock(), Mutex::_no_safepoint_check_flag);
  2474     MutexLockerEx x(freelistLock(), Mutex::_no_safepoint_check_flag);
  2475     Generation::oop_iterate(cl);
  2475     Generation::oop_iterate(cl);
  3303   // have been bumped up by the thread that claimed the last
  3303   // have been bumped up by the thread that claimed the last
  3304   // task.
  3304   // task.
  3305   pst->all_tasks_completed();
  3305   pst->all_tasks_completed();
  3306 }
  3306 }
  3307 
  3307 
  3308 class ParConcMarkingClosure: public MetadataAwareOopClosure {
  3308 class ParConcMarkingClosure: public MetadataVisitingOopIterateClosure {
  3309  private:
  3309  private:
  3310   CMSCollector* _collector;
  3310   CMSCollector* _collector;
  3311   CMSConcMarkingTask* _task;
  3311   CMSConcMarkingTask* _task;
  3312   MemRegion     _span;
  3312   MemRegion     _span;
  3313   CMSBitMap*    _bit_map;
  3313   CMSBitMap*    _bit_map;
  3316  protected:
  3316  protected:
  3317   DO_OOP_WORK_DEFN
  3317   DO_OOP_WORK_DEFN
  3318  public:
  3318  public:
  3319   ParConcMarkingClosure(CMSCollector* collector, CMSConcMarkingTask* task, OopTaskQueue* work_queue,
  3319   ParConcMarkingClosure(CMSCollector* collector, CMSConcMarkingTask* task, OopTaskQueue* work_queue,
  3320                         CMSBitMap* bit_map, CMSMarkStack* overflow_stack):
  3320                         CMSBitMap* bit_map, CMSMarkStack* overflow_stack):
  3321     MetadataAwareOopClosure(collector->ref_processor()),
  3321     MetadataVisitingOopIterateClosure(collector->ref_processor()),
  3322     _collector(collector),
  3322     _collector(collector),
  3323     _task(task),
  3323     _task(task),
  3324     _span(collector->_span),
  3324     _span(collector->_span),
  3325     _work_queue(work_queue),
  3325     _work_queue(work_queue),
  3326     _bit_map(bit_map),
  3326     _bit_map(bit_map),
  3379       }
  3379       }
  3380     } // Else, some other thread got there first
  3380     } // Else, some other thread got there first
  3381     do_yield_check();
  3381     do_yield_check();
  3382   }
  3382   }
  3383 }
  3383 }
  3384 
       
  3385 void ParConcMarkingClosure::do_oop(oop* p)       { ParConcMarkingClosure::do_oop_work(p); }
       
  3386 void ParConcMarkingClosure::do_oop(narrowOop* p) { ParConcMarkingClosure::do_oop_work(p); }
       
  3387 
  3384 
  3388 void ParConcMarkingClosure::trim_queue(size_t max) {
  3385 void ParConcMarkingClosure::trim_queue(size_t max) {
  3389   while (_work_queue->size() > max) {
  3386   while (_work_queue->size() > max) {
  3390     oop new_oop;
  3387     oop new_oop;
  3391     if (_work_queue->pop_local(new_oop)) {
  3388     if (_work_queue->pop_local(new_oop)) {
  4063   verify_overflow_empty();
  4060   verify_overflow_empty();
  4064   return cumNumDirtyCards;
  4061   return cumNumDirtyCards;
  4065 }
  4062 }
  4066 
  4063 
  4067 class PrecleanCLDClosure : public CLDClosure {
  4064 class PrecleanCLDClosure : public CLDClosure {
  4068   MetadataAwareOopsInGenClosure* _cm_closure;
  4065   MetadataVisitingOopsInGenClosure* _cm_closure;
  4069  public:
  4066  public:
  4070   PrecleanCLDClosure(MetadataAwareOopsInGenClosure* oop_closure) : _cm_closure(oop_closure) {}
  4067   PrecleanCLDClosure(MetadataVisitingOopsInGenClosure* oop_closure) : _cm_closure(oop_closure) {}
  4071   void do_cld(ClassLoaderData* cld) {
  4068   void do_cld(ClassLoaderData* cld) {
  4072     if (cld->has_accumulated_modified_oops()) {
  4069     if (cld->has_accumulated_modified_oops()) {
  4073       cld->clear_accumulated_modified_oops();
  4070       cld->clear_accumulated_modified_oops();
  4074 
  4071 
  4075       _cm_closure->do_cld(cld);
  4072       _cm_closure->do_cld(cld);
  4427     // Scan all new class loader data objects and new dependencies that were
  4424     // Scan all new class loader data objects and new dependencies that were
  4428     // introduced during concurrent marking.
  4425     // introduced during concurrent marking.
  4429     ResourceMark rm;
  4426     ResourceMark rm;
  4430     GrowableArray<ClassLoaderData*>* array = ClassLoaderDataGraph::new_clds();
  4427     GrowableArray<ClassLoaderData*>* array = ClassLoaderDataGraph::new_clds();
  4431     for (int i = 0; i < array->length(); i++) {
  4428     for (int i = 0; i < array->length(); i++) {
  4432       par_mrias_cl.do_cld_nv(array->at(i));
  4429       Devirtualizer::do_cld(&par_mrias_cl, array->at(i));
  4433     }
  4430     }
  4434 
  4431 
  4435     // We don't need to keep track of new CLDs anymore.
  4432     // We don't need to keep track of new CLDs anymore.
  4436     ClassLoaderDataGraph::remember_new_clds(false);
  4433     ClassLoaderDataGraph::remember_new_clds(false);
  4437 
  4434 
  4968     // Scan all class loader data objects that might have been introduced
  4965     // Scan all class loader data objects that might have been introduced
  4969     // during concurrent marking.
  4966     // during concurrent marking.
  4970     ResourceMark rm;
  4967     ResourceMark rm;
  4971     GrowableArray<ClassLoaderData*>* array = ClassLoaderDataGraph::new_clds();
  4968     GrowableArray<ClassLoaderData*>* array = ClassLoaderDataGraph::new_clds();
  4972     for (int i = 0; i < array->length(); i++) {
  4969     for (int i = 0; i < array->length(); i++) {
  4973       mrias_cl.do_cld_nv(array->at(i));
  4970       Devirtualizer::do_cld(&mrias_cl, array->at(i));
  4974     }
  4971     }
  4975 
  4972 
  4976     // We don't need to keep track of new CLDs anymore.
  4973     // We don't need to keep track of new CLDs anymore.
  4977     ClassLoaderDataGraph::remember_new_clds(false);
  4974     ClassLoaderDataGraph::remember_new_clds(false);
  4978 
  4975 
  5801     // this should be made more efficient
  5798     // this should be made more efficient
  5802     _bitMap->mark(addr);
  5799     _bitMap->mark(addr);
  5803   }
  5800   }
  5804 }
  5801 }
  5805 
  5802 
  5806 void MarkRefsIntoClosure::do_oop(oop* p)       { MarkRefsIntoClosure::do_oop_work(p); }
       
  5807 void MarkRefsIntoClosure::do_oop(narrowOop* p) { MarkRefsIntoClosure::do_oop_work(p); }
       
  5808 
       
  5809 ParMarkRefsIntoClosure::ParMarkRefsIntoClosure(
  5803 ParMarkRefsIntoClosure::ParMarkRefsIntoClosure(
  5810   MemRegion span, CMSBitMap* bitMap):
  5804   MemRegion span, CMSBitMap* bitMap):
  5811     _span(span),
  5805     _span(span),
  5812     _bitMap(bitMap)
  5806     _bitMap(bitMap)
  5813 {
  5807 {
  5822   if (_span.contains(addr)) {
  5816   if (_span.contains(addr)) {
  5823     // this should be made more efficient
  5817     // this should be made more efficient
  5824     _bitMap->par_mark(addr);
  5818     _bitMap->par_mark(addr);
  5825   }
  5819   }
  5826 }
  5820 }
  5827 
       
  5828 void ParMarkRefsIntoClosure::do_oop(oop* p)       { ParMarkRefsIntoClosure::do_oop_work(p); }
       
  5829 void ParMarkRefsIntoClosure::do_oop(narrowOop* p) { ParMarkRefsIntoClosure::do_oop_work(p); }
       
  5830 
  5821 
  5831 // A variant of the above, used for CMS marking verification.
  5822 // A variant of the above, used for CMS marking verification.
  5832 MarkRefsIntoVerifyClosure::MarkRefsIntoVerifyClosure(
  5823 MarkRefsIntoVerifyClosure::MarkRefsIntoVerifyClosure(
  5833   MemRegion span, CMSBitMap* verification_bm, CMSBitMap* cms_bm):
  5824   MemRegion span, CMSBitMap* verification_bm, CMSBitMap* cms_bm):
  5834     _span(span),
  5825     _span(span),
  5853       log.error(" (" INTPTR_FORMAT " should have been marked)", p2i(addr));
  5844       log.error(" (" INTPTR_FORMAT " should have been marked)", p2i(addr));
  5854       fatal("... aborting");
  5845       fatal("... aborting");
  5855     }
  5846     }
  5856   }
  5847   }
  5857 }
  5848 }
  5858 
       
  5859 void MarkRefsIntoVerifyClosure::do_oop(oop* p)       { MarkRefsIntoVerifyClosure::do_oop_work(p); }
       
  5860 void MarkRefsIntoVerifyClosure::do_oop(narrowOop* p) { MarkRefsIntoVerifyClosure::do_oop_work(p); }
       
  5861 
  5849 
  5862 //////////////////////////////////////////////////
  5850 //////////////////////////////////////////////////
  5863 // MarkRefsIntoAndScanClosure
  5851 // MarkRefsIntoAndScanClosure
  5864 //////////////////////////////////////////////////
  5852 //////////////////////////////////////////////////
  5865 
  5853 
  5931     assert(_collector->no_preserved_marks(),
  5919     assert(_collector->no_preserved_marks(),
  5932            "All preserved marks should have been restored above");
  5920            "All preserved marks should have been restored above");
  5933   }
  5921   }
  5934 }
  5922 }
  5935 
  5923 
  5936 void MarkRefsIntoAndScanClosure::do_oop(oop* p)       { MarkRefsIntoAndScanClosure::do_oop_work(p); }
       
  5937 void MarkRefsIntoAndScanClosure::do_oop(narrowOop* p) { MarkRefsIntoAndScanClosure::do_oop_work(p); }
       
  5938 
       
  5939 void MarkRefsIntoAndScanClosure::do_yield_work() {
  5924 void MarkRefsIntoAndScanClosure::do_yield_work() {
  5940   assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  5925   assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  5941          "CMS thread should hold CMS token");
  5926          "CMS thread should hold CMS token");
  5942   assert_lock_strong(_freelistLock);
  5927   assert_lock_strong(_freelistLock);
  5943   assert_lock_strong(_bit_map->lock());
  5928   assert_lock_strong(_bit_map->lock());
  6013         trim_queue(_low_water_mark);
  5998         trim_queue(_low_water_mark);
  6014       } // Else, another thread claimed the object
  5999       } // Else, another thread claimed the object
  6015     }
  6000     }
  6016   }
  6001   }
  6017 }
  6002 }
  6018 
       
  6019 void ParMarkRefsIntoAndScanClosure::do_oop(oop* p)       { ParMarkRefsIntoAndScanClosure::do_oop_work(p); }
       
  6020 void ParMarkRefsIntoAndScanClosure::do_oop(narrowOop* p) { ParMarkRefsIntoAndScanClosure::do_oop_work(p); }
       
  6021 
  6003 
  6022 // This closure is used to rescan the marked objects on the dirty cards
  6004 // This closure is used to rescan the marked objects on the dirty cards
  6023 // in the mod union table and the card table proper.
  6005 // in the mod union table and the card table proper.
  6024 size_t ScanMarkedObjectsAgainCarefullyClosure::do_object_careful_m(
  6006 size_t ScanMarkedObjectsAgainCarefullyClosure::do_object_careful_m(
  6025   oop p, MemRegion mr) {
  6007   oop p, MemRegion mr) {
  6595 
  6577 
  6596 PushAndMarkVerifyClosure::PushAndMarkVerifyClosure(
  6578 PushAndMarkVerifyClosure::PushAndMarkVerifyClosure(
  6597   CMSCollector* collector, MemRegion span,
  6579   CMSCollector* collector, MemRegion span,
  6598   CMSBitMap* verification_bm, CMSBitMap* cms_bm,
  6580   CMSBitMap* verification_bm, CMSBitMap* cms_bm,
  6599   CMSMarkStack*  mark_stack):
  6581   CMSMarkStack*  mark_stack):
  6600   MetadataAwareOopClosure(collector->ref_processor()),
  6582   MetadataVisitingOopIterateClosure(collector->ref_processor()),
  6601   _collector(collector),
  6583   _collector(collector),
  6602   _span(span),
  6584   _span(span),
  6603   _verification_bm(verification_bm),
  6585   _verification_bm(verification_bm),
  6604   _cms_bm(cms_bm),
  6586   _cms_bm(cms_bm),
  6605   _mark_stack(mark_stack)
  6587   _mark_stack(mark_stack)
  6652 
  6634 
  6653 PushOrMarkClosure::PushOrMarkClosure(CMSCollector* collector,
  6635 PushOrMarkClosure::PushOrMarkClosure(CMSCollector* collector,
  6654                      MemRegion span,
  6636                      MemRegion span,
  6655                      CMSBitMap* bitMap, CMSMarkStack*  markStack,
  6637                      CMSBitMap* bitMap, CMSMarkStack*  markStack,
  6656                      HeapWord* finger, MarkFromRootsClosure* parent) :
  6638                      HeapWord* finger, MarkFromRootsClosure* parent) :
  6657   MetadataAwareOopClosure(collector->ref_processor()),
  6639   MetadataVisitingOopIterateClosure(collector->ref_processor()),
  6658   _collector(collector),
  6640   _collector(collector),
  6659   _span(span),
  6641   _span(span),
  6660   _bitMap(bitMap),
  6642   _bitMap(bitMap),
  6661   _markStack(markStack),
  6643   _markStack(markStack),
  6662   _finger(finger),
  6644   _finger(finger),
  6669                                            OopTaskQueue* work_queue,
  6651                                            OopTaskQueue* work_queue,
  6670                                            CMSMarkStack*  overflow_stack,
  6652                                            CMSMarkStack*  overflow_stack,
  6671                                            HeapWord* finger,
  6653                                            HeapWord* finger,
  6672                                            HeapWord* volatile* global_finger_addr,
  6654                                            HeapWord* volatile* global_finger_addr,
  6673                                            ParMarkFromRootsClosure* parent) :
  6655                                            ParMarkFromRootsClosure* parent) :
  6674   MetadataAwareOopClosure(collector->ref_processor()),
  6656   MetadataVisitingOopIterateClosure(collector->ref_processor()),
  6675   _collector(collector),
  6657   _collector(collector),
  6676   _whole_span(collector->_span),
  6658   _whole_span(collector->_span),
  6677   _span(span),
  6659   _span(span),
  6678   _bit_map(bit_map),
  6660   _bit_map(bit_map),
  6679   _work_queue(work_queue),
  6661   _work_queue(work_queue),
  6750     // bit map
  6732     // bit map
  6751     do_yield_check();
  6733     do_yield_check();
  6752   }
  6734   }
  6753 }
  6735 }
  6754 
  6736 
  6755 void PushOrMarkClosure::do_oop(oop* p)       { PushOrMarkClosure::do_oop_work(p); }
       
  6756 void PushOrMarkClosure::do_oop(narrowOop* p) { PushOrMarkClosure::do_oop_work(p); }
       
  6757 
       
  6758 void ParPushOrMarkClosure::do_oop(oop obj) {
  6737 void ParPushOrMarkClosure::do_oop(oop obj) {
  6759   // Ignore mark word because we are running concurrent with mutators.
  6738   // Ignore mark word because we are running concurrent with mutators.
  6760   assert(oopDesc::is_oop_or_null(obj, true), "Expected an oop or NULL at " PTR_FORMAT, p2i(obj));
  6739   assert(oopDesc::is_oop_or_null(obj, true), "Expected an oop or NULL at " PTR_FORMAT, p2i(obj));
  6761   HeapWord* addr = (HeapWord*)obj;
  6740   HeapWord* addr = (HeapWord*)obj;
  6762   if (_whole_span.contains(addr) && !_bit_map->isMarked(addr)) {
  6741   if (_whole_span.contains(addr) && !_bit_map->isMarked(addr)) {
  6799     }
  6778     }
  6800     do_yield_check();
  6779     do_yield_check();
  6801   }
  6780   }
  6802 }
  6781 }
  6803 
  6782 
  6804 void ParPushOrMarkClosure::do_oop(oop* p)       { ParPushOrMarkClosure::do_oop_work(p); }
       
  6805 void ParPushOrMarkClosure::do_oop(narrowOop* p) { ParPushOrMarkClosure::do_oop_work(p); }
       
  6806 
       
  6807 PushAndMarkClosure::PushAndMarkClosure(CMSCollector* collector,
  6783 PushAndMarkClosure::PushAndMarkClosure(CMSCollector* collector,
  6808                                        MemRegion span,
  6784                                        MemRegion span,
  6809                                        ReferenceDiscoverer* rd,
  6785                                        ReferenceDiscoverer* rd,
  6810                                        CMSBitMap* bit_map,
  6786                                        CMSBitMap* bit_map,
  6811                                        CMSBitMap* mod_union_table,
  6787                                        CMSBitMap* mod_union_table,
  6812                                        CMSMarkStack*  mark_stack,
  6788                                        CMSMarkStack*  mark_stack,
  6813                                        bool           concurrent_precleaning):
  6789                                        bool           concurrent_precleaning):
  6814   MetadataAwareOopClosure(rd),
  6790   MetadataVisitingOopIterateClosure(rd),
  6815   _collector(collector),
  6791   _collector(collector),
  6816   _span(span),
  6792   _span(span),
  6817   _bit_map(bit_map),
  6793   _bit_map(bit_map),
  6818   _mod_union_table(mod_union_table),
  6794   _mod_union_table(mod_union_table),
  6819   _mark_stack(mark_stack),
  6795   _mark_stack(mark_stack),
  6881 ParPushAndMarkClosure::ParPushAndMarkClosure(CMSCollector* collector,
  6857 ParPushAndMarkClosure::ParPushAndMarkClosure(CMSCollector* collector,
  6882                                              MemRegion span,
  6858                                              MemRegion span,
  6883                                              ReferenceDiscoverer* rd,
  6859                                              ReferenceDiscoverer* rd,
  6884                                              CMSBitMap* bit_map,
  6860                                              CMSBitMap* bit_map,
  6885                                              OopTaskQueue* work_queue):
  6861                                              OopTaskQueue* work_queue):
  6886   MetadataAwareOopClosure(rd),
  6862   MetadataVisitingOopIterateClosure(rd),
  6887   _collector(collector),
  6863   _collector(collector),
  6888   _span(span),
  6864   _span(span),
  6889   _bit_map(bit_map),
  6865   _bit_map(bit_map),
  6890   _work_queue(work_queue)
  6866   _work_queue(work_queue)
  6891 {
  6867 {
  6892   assert(ref_discoverer() != NULL, "ref_discoverer shouldn't be NULL");
  6868   assert(ref_discoverer() != NULL, "ref_discoverer shouldn't be NULL");
  6893 }
  6869 }
  6894 
       
  6895 void PushAndMarkClosure::do_oop(oop* p)       { PushAndMarkClosure::do_oop_work(p); }
       
  6896 void PushAndMarkClosure::do_oop(narrowOop* p) { PushAndMarkClosure::do_oop_work(p); }
       
  6897 
  6870 
  6898 // Grey object rescan during second checkpoint phase --
  6871 // Grey object rescan during second checkpoint phase --
  6899 // the parallel version.
  6872 // the parallel version.
  6900 void ParPushAndMarkClosure::do_oop(oop obj) {
  6873 void ParPushAndMarkClosure::do_oop(oop obj) {
  6901   // In the assert below, we ignore the mark word because
  6874   // In the assert below, we ignore the mark word because
  6934         _collector->_par_pmc_remark_ovflw++; //  imprecise OK: no need to CAS
  6907         _collector->_par_pmc_remark_ovflw++; //  imprecise OK: no need to CAS
  6935       }
  6908       }
  6936     } // Else, some other thread got there first
  6909     } // Else, some other thread got there first
  6937   }
  6910   }
  6938 }
  6911 }
  6939 
       
  6940 void ParPushAndMarkClosure::do_oop(oop* p)       { ParPushAndMarkClosure::do_oop_work(p); }
       
  6941 void ParPushAndMarkClosure::do_oop(narrowOop* p) { ParPushAndMarkClosure::do_oop_work(p); }
       
  6942 
  6912 
  6943 void CMSPrecleanRefsYieldClosure::do_yield_work() {
  6913 void CMSPrecleanRefsYieldClosure::do_yield_work() {
  6944   Mutex* bml = _collector->bitMapLock();
  6914   Mutex* bml = _collector->bitMapLock();
  6945   assert_lock_strong(bml);
  6915   assert_lock_strong(bml);
  6946   assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  6916   assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  7604       }
  7574       }
  7605     }
  7575     }
  7606   }
  7576   }
  7607 }
  7577 }
  7608 
  7578 
  7609 void CMSKeepAliveClosure::do_oop(oop* p)       { CMSKeepAliveClosure::do_oop_work(p); }
       
  7610 void CMSKeepAliveClosure::do_oop(narrowOop* p) { CMSKeepAliveClosure::do_oop_work(p); }
       
  7611 
       
  7612 // CMSParKeepAliveClosure: a parallel version of the above.
  7579 // CMSParKeepAliveClosure: a parallel version of the above.
  7613 // The work queues are private to each closure (thread),
  7580 // The work queues are private to each closure (thread),
  7614 // but (may be) available for stealing by other threads.
  7581 // but (may be) available for stealing by other threads.
  7615 void CMSParKeepAliveClosure::do_oop(oop obj) {
  7582 void CMSParKeepAliveClosure::do_oop(oop obj) {
  7616   HeapWord* addr = (HeapWord*)obj;
  7583   HeapWord* addr = (HeapWord*)obj;
  7626       // stack usage lower, but leave some oops for potential stealers
  7593       // stack usage lower, but leave some oops for potential stealers
  7627       trim_queue(_low_water_mark);
  7594       trim_queue(_low_water_mark);
  7628     } // Else, another thread got there first
  7595     } // Else, another thread got there first
  7629   }
  7596   }
  7630 }
  7597 }
  7631 
       
  7632 void CMSParKeepAliveClosure::do_oop(oop* p)       { CMSParKeepAliveClosure::do_oop_work(p); }
       
  7633 void CMSParKeepAliveClosure::do_oop(narrowOop* p) { CMSParKeepAliveClosure::do_oop_work(p); }
       
  7634 
  7598 
  7635 void CMSParKeepAliveClosure::trim_queue(uint max) {
  7599 void CMSParKeepAliveClosure::trim_queue(uint max) {
  7636   while (_work_queue->size() > max) {
  7600   while (_work_queue->size() > max) {
  7637     oop new_oop;
  7601     oop new_oop;
  7638     if (_work_queue->pop_local(new_oop)) {
  7602     if (_work_queue->pop_local(new_oop)) {
  7674         _collector->_par_kac_ovflw++;
  7638         _collector->_par_kac_ovflw++;
  7675       }
  7639       }
  7676     } // Else another thread got there already
  7640     } // Else another thread got there already
  7677   }
  7641   }
  7678 }
  7642 }
  7679 
       
  7680 void CMSInnerParMarkAndPushClosure::do_oop(oop* p)       { CMSInnerParMarkAndPushClosure::do_oop_work(p); }
       
  7681 void CMSInnerParMarkAndPushClosure::do_oop(narrowOop* p) { CMSInnerParMarkAndPushClosure::do_oop_work(p); }
       
  7682 
  7643 
  7683 //////////////////////////////////////////////////////////////////
  7644 //////////////////////////////////////////////////////////////////
  7684 //  CMSExpansionCause                /////////////////////////////
  7645 //  CMSExpansionCause                /////////////////////////////
  7685 //////////////////////////////////////////////////////////////////
  7646 //////////////////////////////////////////////////////////////////
  7686 const char* CMSExpansionCause::to_string(CMSExpansionCause::Cause cause) {
  7647 const char* CMSExpansionCause::to_string(CMSExpansionCause::Cause cause) {