src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp

Thu, 20 Nov 2008 16:56:09 -0800

author
ysr
date
Thu, 20 Nov 2008 16:56:09 -0800
changeset 888
c96030fff130
parent 887
00b023ae2d78
child 892
27a80744a83b
permissions
-rw-r--r--

6684579: SoftReference processing can be made more efficient
Summary: For current soft-ref clearing policies, we can decide at marking time if a soft-reference will definitely not be cleared, postponing the decision of whether it will definitely be cleared to the final reference processing phase. This can be especially beneficial in the case of concurrent collectors where the marking is usually concurrent but reference processing is usually not.
Reviewed-by: jmasa

     1 /*
     2  * Copyright 2001-2008 Sun Microsystems, Inc.  All Rights Reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
    20  * CA 95054 USA or visit www.sun.com if you need additional information or
    21  * have any questions.
    22  *
    23  */
    25 # include "incls/_precompiled.incl"
    26 # include "incls/_concurrentMarkSweepGeneration.cpp.incl"
    28 // statics
    29 CMSCollector* ConcurrentMarkSweepGeneration::_collector = NULL;
    30 bool          CMSCollector::_full_gc_requested          = false;
    32 //////////////////////////////////////////////////////////////////
    33 // In support of CMS/VM thread synchronization
    34 //////////////////////////////////////////////////////////////////
    35 // We split use of the CGC_lock into 2 "levels".
    36 // The low-level locking is of the usual CGC_lock monitor. We introduce
    37 // a higher level "token" (hereafter "CMS token") built on top of the
    38 // low level monitor (hereafter "CGC lock").
    39 // The token-passing protocol gives priority to the VM thread. The
    40 // CMS-lock doesn't provide any fairness guarantees, but clients
    41 // should ensure that it is only held for very short, bounded
    42 // durations.
    43 //
    44 // When either of the CMS thread or the VM thread is involved in
    45 // collection operations during which it does not want the other
    46 // thread to interfere, it obtains the CMS token.
    47 //
    48 // If either thread tries to get the token while the other has
    49 // it, that thread waits. However, if the VM thread and CMS thread
    50 // both want the token, then the VM thread gets priority while the
    51 // CMS thread waits. This ensures, for instance, that the "concurrent"
    52 // phases of the CMS thread's work do not block out the VM thread
    53 // for long periods of time as the CMS thread continues to hog
    54 // the token. (See bug 4616232).
    55 //
    56 // The baton-passing functions are, however, controlled by the
    57 // flags _foregroundGCShouldWait and _foregroundGCIsActive,
    58 // and here the low-level CMS lock, not the high level token,
    59 // ensures mutual exclusion.
    60 //
    61 // Two important conditions that we have to satisfy:
    62 // 1. if a thread does a low-level wait on the CMS lock, then it
    63 //    relinquishes the CMS token if it were holding that token
    64 //    when it acquired the low-level CMS lock.
    65 // 2. any low-level notifications on the low-level lock
    66 //    should only be sent when a thread has relinquished the token.
    67 //
    68 // In the absence of either property, we'd have potential deadlock.
    69 //
    70 // We protect each of the CMS (concurrent and sequential) phases
    71 // with the CMS _token_, not the CMS _lock_.
    72 //
    73 // The only code protected by CMS lock is the token acquisition code
    74 // itself, see ConcurrentMarkSweepThread::[de]synchronize(), and the
    75 // baton-passing code.
    76 //
    77 // Unfortunately, i couldn't come up with a good abstraction to factor and
    78 // hide the naked CGC_lock manipulation in the baton-passing code
    79 // further below. That's something we should try to do. Also, the proof
    80 // of correctness of this 2-level locking scheme is far from obvious,
    81 // and potentially quite slippery. We have an uneasy supsicion, for instance,
    82 // that there may be a theoretical possibility of delay/starvation in the
    83 // low-level lock/wait/notify scheme used for the baton-passing because of
    84 // potential intereference with the priority scheme embodied in the
    85 // CMS-token-passing protocol. See related comments at a CGC_lock->wait()
    86 // invocation further below and marked with "XXX 20011219YSR".
    87 // Indeed, as we note elsewhere, this may become yet more slippery
    88 // in the presence of multiple CMS and/or multiple VM threads. XXX
    90 class CMSTokenSync: public StackObj {
    91  private:
    92   bool _is_cms_thread;
    93  public:
    94   CMSTokenSync(bool is_cms_thread):
    95     _is_cms_thread(is_cms_thread) {
    96     assert(is_cms_thread == Thread::current()->is_ConcurrentGC_thread(),
    97            "Incorrect argument to constructor");
    98     ConcurrentMarkSweepThread::synchronize(_is_cms_thread);
    99   }
   101   ~CMSTokenSync() {
   102     assert(_is_cms_thread ?
   103              ConcurrentMarkSweepThread::cms_thread_has_cms_token() :
   104              ConcurrentMarkSweepThread::vm_thread_has_cms_token(),
   105           "Incorrect state");
   106     ConcurrentMarkSweepThread::desynchronize(_is_cms_thread);
   107   }
   108 };
   110 // Convenience class that does a CMSTokenSync, and then acquires
   111 // upto three locks.
   112 class CMSTokenSyncWithLocks: public CMSTokenSync {
   113  private:
   114   // Note: locks are acquired in textual declaration order
   115   // and released in the opposite order
   116   MutexLockerEx _locker1, _locker2, _locker3;
   117  public:
   118   CMSTokenSyncWithLocks(bool is_cms_thread, Mutex* mutex1,
   119                         Mutex* mutex2 = NULL, Mutex* mutex3 = NULL):
   120     CMSTokenSync(is_cms_thread),
   121     _locker1(mutex1, Mutex::_no_safepoint_check_flag),
   122     _locker2(mutex2, Mutex::_no_safepoint_check_flag),
   123     _locker3(mutex3, Mutex::_no_safepoint_check_flag)
   124   { }
   125 };
   128 // Wrapper class to temporarily disable icms during a foreground cms collection.
   129 class ICMSDisabler: public StackObj {
   130  public:
   131   // The ctor disables icms and wakes up the thread so it notices the change;
   132   // the dtor re-enables icms.  Note that the CMSCollector methods will check
   133   // CMSIncrementalMode.
   134   ICMSDisabler()  { CMSCollector::disable_icms(); CMSCollector::start_icms(); }
   135   ~ICMSDisabler() { CMSCollector::enable_icms(); }
   136 };
   138 //////////////////////////////////////////////////////////////////
   139 //  Concurrent Mark-Sweep Generation /////////////////////////////
   140 //////////////////////////////////////////////////////////////////
   142 NOT_PRODUCT(CompactibleFreeListSpace* debug_cms_space;)
   144 // This struct contains per-thread things necessary to support parallel
   145 // young-gen collection.
   146 class CMSParGCThreadState: public CHeapObj {
   147  public:
   148   CFLS_LAB lab;
   149   PromotionInfo promo;
   151   // Constructor.
   152   CMSParGCThreadState(CompactibleFreeListSpace* cfls) : lab(cfls) {
   153     promo.setSpace(cfls);
   154   }
   155 };
   157 ConcurrentMarkSweepGeneration::ConcurrentMarkSweepGeneration(
   158      ReservedSpace rs, size_t initial_byte_size, int level,
   159      CardTableRS* ct, bool use_adaptive_freelists,
   160      FreeBlockDictionary::DictionaryChoice dictionaryChoice) :
   161   CardGeneration(rs, initial_byte_size, level, ct),
   162   _dilatation_factor(((double)MinChunkSize)/((double)(oopDesc::header_size()))),
   163   _debug_collection_type(Concurrent_collection_type)
   164 {
   165   HeapWord* bottom = (HeapWord*) _virtual_space.low();
   166   HeapWord* end    = (HeapWord*) _virtual_space.high();
   168   _direct_allocated_words = 0;
   169   NOT_PRODUCT(
   170     _numObjectsPromoted = 0;
   171     _numWordsPromoted = 0;
   172     _numObjectsAllocated = 0;
   173     _numWordsAllocated = 0;
   174   )
   176   _cmsSpace = new CompactibleFreeListSpace(_bts, MemRegion(bottom, end),
   177                                            use_adaptive_freelists,
   178                                            dictionaryChoice);
   179   NOT_PRODUCT(debug_cms_space = _cmsSpace;)
   180   if (_cmsSpace == NULL) {
   181     vm_exit_during_initialization(
   182       "CompactibleFreeListSpace allocation failure");
   183   }
   184   _cmsSpace->_gen = this;
   186   _gc_stats = new CMSGCStats();
   188   // Verify the assumption that FreeChunk::_prev and OopDesc::_klass
   189   // offsets match. The ability to tell free chunks from objects
   190   // depends on this property.
   191   debug_only(
   192     FreeChunk* junk = NULL;
   193     assert(UseCompressedOops ||
   194            junk->prev_addr() == (void*)(oop(junk)->klass_addr()),
   195            "Offset of FreeChunk::_prev within FreeChunk must match"
   196            "  that of OopDesc::_klass within OopDesc");
   197   )
   198   if (ParallelGCThreads > 0) {
   199     typedef CMSParGCThreadState* CMSParGCThreadStatePtr;
   200     _par_gc_thread_states =
   201       NEW_C_HEAP_ARRAY(CMSParGCThreadStatePtr, ParallelGCThreads);
   202     if (_par_gc_thread_states == NULL) {
   203       vm_exit_during_initialization("Could not allocate par gc structs");
   204     }
   205     for (uint i = 0; i < ParallelGCThreads; i++) {
   206       _par_gc_thread_states[i] = new CMSParGCThreadState(cmsSpace());
   207       if (_par_gc_thread_states[i] == NULL) {
   208         vm_exit_during_initialization("Could not allocate par gc structs");
   209       }
   210     }
   211   } else {
   212     _par_gc_thread_states = NULL;
   213   }
   214   _incremental_collection_failed = false;
   215   // The "dilatation_factor" is the expansion that can occur on
   216   // account of the fact that the minimum object size in the CMS
   217   // generation may be larger than that in, say, a contiguous young
   218   //  generation.
   219   // Ideally, in the calculation below, we'd compute the dilatation
   220   // factor as: MinChunkSize/(promoting_gen's min object size)
   221   // Since we do not have such a general query interface for the
   222   // promoting generation, we'll instead just use the mimimum
   223   // object size (which today is a header's worth of space);
   224   // note that all arithmetic is in units of HeapWords.
   225   assert(MinChunkSize >= oopDesc::header_size(), "just checking");
   226   assert(_dilatation_factor >= 1.0, "from previous assert");
   227 }
   230 // The field "_initiating_occupancy" represents the occupancy percentage
   231 // at which we trigger a new collection cycle.  Unless explicitly specified
   232 // via CMSInitiating[Perm]OccupancyFraction (argument "io" below), it
   233 // is calculated by:
   234 //
   235 //   Let "f" be MinHeapFreeRatio in
   236 //
   237 //    _intiating_occupancy = 100-f +
   238 //                           f * (CMSTrigger[Perm]Ratio/100)
   239 //   where CMSTrigger[Perm]Ratio is the argument "tr" below.
   240 //
   241 // That is, if we assume the heap is at its desired maximum occupancy at the
   242 // end of a collection, we let CMSTrigger[Perm]Ratio of the (purported) free
   243 // space be allocated before initiating a new collection cycle.
   244 //
   245 void ConcurrentMarkSweepGeneration::init_initiating_occupancy(intx io, intx tr) {
   246   assert(io <= 100 && tr >= 0 && tr <= 100, "Check the arguments");
   247   if (io >= 0) {
   248     _initiating_occupancy = (double)io / 100.0;
   249   } else {
   250     _initiating_occupancy = ((100 - MinHeapFreeRatio) +
   251                              (double)(tr * MinHeapFreeRatio) / 100.0)
   252                             / 100.0;
   253   }
   254 }
   257 void ConcurrentMarkSweepGeneration::ref_processor_init() {
   258   assert(collector() != NULL, "no collector");
   259   collector()->ref_processor_init();
   260 }
   262 void CMSCollector::ref_processor_init() {
   263   if (_ref_processor == NULL) {
   264     // Allocate and initialize a reference processor
   265     _ref_processor = ReferenceProcessor::create_ref_processor(
   266         _span,                               // span
   267         _cmsGen->refs_discovery_is_atomic(), // atomic_discovery
   268         _cmsGen->refs_discovery_is_mt(),     // mt_discovery
   269         &_is_alive_closure,
   270         ParallelGCThreads,
   271         ParallelRefProcEnabled);
   272     // Initialize the _ref_processor field of CMSGen
   273     _cmsGen->set_ref_processor(_ref_processor);
   275     // Allocate a dummy ref processor for perm gen.
   276     ReferenceProcessor* rp2 = new ReferenceProcessor();
   277     if (rp2 == NULL) {
   278       vm_exit_during_initialization("Could not allocate ReferenceProcessor object");
   279     }
   280     _permGen->set_ref_processor(rp2);
   281   }
   282 }
   284 CMSAdaptiveSizePolicy* CMSCollector::size_policy() {
   285   GenCollectedHeap* gch = GenCollectedHeap::heap();
   286   assert(gch->kind() == CollectedHeap::GenCollectedHeap,
   287     "Wrong type of heap");
   288   CMSAdaptiveSizePolicy* sp = (CMSAdaptiveSizePolicy*)
   289     gch->gen_policy()->size_policy();
   290   assert(sp->is_gc_cms_adaptive_size_policy(),
   291     "Wrong type of size policy");
   292   return sp;
   293 }
   295 CMSGCAdaptivePolicyCounters* CMSCollector::gc_adaptive_policy_counters() {
   296   CMSGCAdaptivePolicyCounters* results =
   297     (CMSGCAdaptivePolicyCounters*) collector_policy()->counters();
   298   assert(
   299     results->kind() == GCPolicyCounters::CMSGCAdaptivePolicyCountersKind,
   300     "Wrong gc policy counter kind");
   301   return results;
   302 }
   305 void ConcurrentMarkSweepGeneration::initialize_performance_counters() {
   307   const char* gen_name = "old";
   309   // Generation Counters - generation 1, 1 subspace
   310   _gen_counters = new GenerationCounters(gen_name, 1, 1, &_virtual_space);
   312   _space_counters = new GSpaceCounters(gen_name, 0,
   313                                        _virtual_space.reserved_size(),
   314                                        this, _gen_counters);
   315 }
   317 CMSStats::CMSStats(ConcurrentMarkSweepGeneration* cms_gen, unsigned int alpha):
   318   _cms_gen(cms_gen)
   319 {
   320   assert(alpha <= 100, "bad value");
   321   _saved_alpha = alpha;
   323   // Initialize the alphas to the bootstrap value of 100.
   324   _gc0_alpha = _cms_alpha = 100;
   326   _cms_begin_time.update();
   327   _cms_end_time.update();
   329   _gc0_duration = 0.0;
   330   _gc0_period = 0.0;
   331   _gc0_promoted = 0;
   333   _cms_duration = 0.0;
   334   _cms_period = 0.0;
   335   _cms_allocated = 0;
   337   _cms_used_at_gc0_begin = 0;
   338   _cms_used_at_gc0_end = 0;
   339   _allow_duty_cycle_reduction = false;
   340   _valid_bits = 0;
   341   _icms_duty_cycle = CMSIncrementalDutyCycle;
   342 }
   344 // If promotion failure handling is on use
   345 // the padded average size of the promotion for each
   346 // young generation collection.
   347 double CMSStats::time_until_cms_gen_full() const {
   348   size_t cms_free = _cms_gen->cmsSpace()->free();
   349   GenCollectedHeap* gch = GenCollectedHeap::heap();
   350   size_t expected_promotion = gch->get_gen(0)->capacity();
   351   if (HandlePromotionFailure) {
   352     expected_promotion = MIN2(
   353         (size_t) _cms_gen->gc_stats()->avg_promoted()->padded_average(),
   354         expected_promotion);
   355   }
   356   if (cms_free > expected_promotion) {
   357     // Start a cms collection if there isn't enough space to promote
   358     // for the next minor collection.  Use the padded average as
   359     // a safety factor.
   360     cms_free -= expected_promotion;
   362     // Adjust by the safety factor.
   363     double cms_free_dbl = (double)cms_free;
   364     cms_free_dbl = cms_free_dbl * (100.0 - CMSIncrementalSafetyFactor) / 100.0;
   366     if (PrintGCDetails && Verbose) {
   367       gclog_or_tty->print_cr("CMSStats::time_until_cms_gen_full: cms_free "
   368         SIZE_FORMAT " expected_promotion " SIZE_FORMAT,
   369         cms_free, expected_promotion);
   370       gclog_or_tty->print_cr("  cms_free_dbl %f cms_consumption_rate %f",
   371         cms_free_dbl, cms_consumption_rate() + 1.0);
   372     }
   373     // Add 1 in case the consumption rate goes to zero.
   374     return cms_free_dbl / (cms_consumption_rate() + 1.0);
   375   }
   376   return 0.0;
   377 }
   379 // Compare the duration of the cms collection to the
   380 // time remaining before the cms generation is empty.
   381 // Note that the time from the start of the cms collection
   382 // to the start of the cms sweep (less than the total
   383 // duration of the cms collection) can be used.  This
   384 // has been tried and some applications experienced
   385 // promotion failures early in execution.  This was
   386 // possibly because the averages were not accurate
   387 // enough at the beginning.
   388 double CMSStats::time_until_cms_start() const {
   389   // We add "gc0_period" to the "work" calculation
   390   // below because this query is done (mostly) at the
   391   // end of a scavenge, so we need to conservatively
   392   // account for that much possible delay
   393   // in the query so as to avoid concurrent mode failures
   394   // due to starting the collection just a wee bit too
   395   // late.
   396   double work = cms_duration() + gc0_period();
   397   double deadline = time_until_cms_gen_full();
   398   if (work > deadline) {
   399     if (Verbose && PrintGCDetails) {
   400       gclog_or_tty->print(
   401         " CMSCollector: collect because of anticipated promotion "
   402         "before full %3.7f + %3.7f > %3.7f ", cms_duration(),
   403         gc0_period(), time_until_cms_gen_full());
   404     }
   405     return 0.0;
   406   }
   407   return work - deadline;
   408 }
   410 // Return a duty cycle based on old_duty_cycle and new_duty_cycle, limiting the
   411 // amount of change to prevent wild oscillation.
   412 unsigned int CMSStats::icms_damped_duty_cycle(unsigned int old_duty_cycle,
   413                                               unsigned int new_duty_cycle) {
   414   assert(old_duty_cycle <= 100, "bad input value");
   415   assert(new_duty_cycle <= 100, "bad input value");
   417   // Note:  use subtraction with caution since it may underflow (values are
   418   // unsigned).  Addition is safe since we're in the range 0-100.
   419   unsigned int damped_duty_cycle = new_duty_cycle;
   420   if (new_duty_cycle < old_duty_cycle) {
   421     const unsigned int largest_delta = MAX2(old_duty_cycle / 4, 5U);
   422     if (new_duty_cycle + largest_delta < old_duty_cycle) {
   423       damped_duty_cycle = old_duty_cycle - largest_delta;
   424     }
   425   } else if (new_duty_cycle > old_duty_cycle) {
   426     const unsigned int largest_delta = MAX2(old_duty_cycle / 4, 15U);
   427     if (new_duty_cycle > old_duty_cycle + largest_delta) {
   428       damped_duty_cycle = MIN2(old_duty_cycle + largest_delta, 100U);
   429     }
   430   }
   431   assert(damped_duty_cycle <= 100, "invalid duty cycle computed");
   433   if (CMSTraceIncrementalPacing) {
   434     gclog_or_tty->print(" [icms_damped_duty_cycle(%d,%d) = %d] ",
   435                            old_duty_cycle, new_duty_cycle, damped_duty_cycle);
   436   }
   437   return damped_duty_cycle;
   438 }
   440 unsigned int CMSStats::icms_update_duty_cycle_impl() {
   441   assert(CMSIncrementalPacing && valid(),
   442          "should be handled in icms_update_duty_cycle()");
   444   double cms_time_so_far = cms_timer().seconds();
   445   double scaled_duration = cms_duration_per_mb() * _cms_used_at_gc0_end / M;
   446   double scaled_duration_remaining = fabsd(scaled_duration - cms_time_so_far);
   448   // Avoid division by 0.
   449   double time_until_full = MAX2(time_until_cms_gen_full(), 0.01);
   450   double duty_cycle_dbl = 100.0 * scaled_duration_remaining / time_until_full;
   452   unsigned int new_duty_cycle = MIN2((unsigned int)duty_cycle_dbl, 100U);
   453   if (new_duty_cycle > _icms_duty_cycle) {
   454     // Avoid very small duty cycles (1 or 2); 0 is allowed.
   455     if (new_duty_cycle > 2) {
   456       _icms_duty_cycle = icms_damped_duty_cycle(_icms_duty_cycle,
   457                                                 new_duty_cycle);
   458     }
   459   } else if (_allow_duty_cycle_reduction) {
   460     // The duty cycle is reduced only once per cms cycle (see record_cms_end()).
   461     new_duty_cycle = icms_damped_duty_cycle(_icms_duty_cycle, new_duty_cycle);
   462     // Respect the minimum duty cycle.
   463     unsigned int min_duty_cycle = (unsigned int)CMSIncrementalDutyCycleMin;
   464     _icms_duty_cycle = MAX2(new_duty_cycle, min_duty_cycle);
   465   }
   467   if (PrintGCDetails || CMSTraceIncrementalPacing) {
   468     gclog_or_tty->print(" icms_dc=%d ", _icms_duty_cycle);
   469   }
   471   _allow_duty_cycle_reduction = false;
   472   return _icms_duty_cycle;
   473 }
   475 #ifndef PRODUCT
   476 void CMSStats::print_on(outputStream *st) const {
   477   st->print(" gc0_alpha=%d,cms_alpha=%d", _gc0_alpha, _cms_alpha);
   478   st->print(",gc0_dur=%g,gc0_per=%g,gc0_promo=" SIZE_FORMAT,
   479                gc0_duration(), gc0_period(), gc0_promoted());
   480   st->print(",cms_dur=%g,cms_dur_per_mb=%g,cms_per=%g,cms_alloc=" SIZE_FORMAT,
   481             cms_duration(), cms_duration_per_mb(),
   482             cms_period(), cms_allocated());
   483   st->print(",cms_since_beg=%g,cms_since_end=%g",
   484             cms_time_since_begin(), cms_time_since_end());
   485   st->print(",cms_used_beg=" SIZE_FORMAT ",cms_used_end=" SIZE_FORMAT,
   486             _cms_used_at_gc0_begin, _cms_used_at_gc0_end);
   487   if (CMSIncrementalMode) {
   488     st->print(",dc=%d", icms_duty_cycle());
   489   }
   491   if (valid()) {
   492     st->print(",promo_rate=%g,cms_alloc_rate=%g",
   493               promotion_rate(), cms_allocation_rate());
   494     st->print(",cms_consumption_rate=%g,time_until_full=%g",
   495               cms_consumption_rate(), time_until_cms_gen_full());
   496   }
   497   st->print(" ");
   498 }
   499 #endif // #ifndef PRODUCT
   501 CMSCollector::CollectorState CMSCollector::_collectorState =
   502                              CMSCollector::Idling;
   503 bool CMSCollector::_foregroundGCIsActive = false;
   504 bool CMSCollector::_foregroundGCShouldWait = false;
   506 CMSCollector::CMSCollector(ConcurrentMarkSweepGeneration* cmsGen,
   507                            ConcurrentMarkSweepGeneration* permGen,
   508                            CardTableRS*                   ct,
   509                            ConcurrentMarkSweepPolicy*     cp):
   510   _cmsGen(cmsGen),
   511   _permGen(permGen),
   512   _ct(ct),
   513   _ref_processor(NULL),    // will be set later
   514   _conc_workers(NULL),     // may be set later
   515   _abort_preclean(false),
   516   _start_sampling(false),
   517   _between_prologue_and_epilogue(false),
   518   _markBitMap(0, Mutex::leaf + 1, "CMS_markBitMap_lock"),
   519   _perm_gen_verify_bit_map(0, -1 /* no mutex */, "No_lock"),
   520   _modUnionTable((CardTableModRefBS::card_shift - LogHeapWordSize),
   521                  -1 /* lock-free */, "No_lock" /* dummy */),
   522   _modUnionClosure(&_modUnionTable),
   523   _modUnionClosurePar(&_modUnionTable),
   524   // Adjust my span to cover old (cms) gen and perm gen
   525   _span(cmsGen->reserved()._union(permGen->reserved())),
   526   // Construct the is_alive_closure with _span & markBitMap
   527   _is_alive_closure(_span, &_markBitMap),
   528   _restart_addr(NULL),
   529   _overflow_list(NULL),
   530   _preserved_oop_stack(NULL),
   531   _preserved_mark_stack(NULL),
   532   _stats(cmsGen),
   533   _eden_chunk_array(NULL),     // may be set in ctor body
   534   _eden_chunk_capacity(0),     // -- ditto --
   535   _eden_chunk_index(0),        // -- ditto --
   536   _survivor_plab_array(NULL),  // -- ditto --
   537   _survivor_chunk_array(NULL), // -- ditto --
   538   _survivor_chunk_capacity(0), // -- ditto --
   539   _survivor_chunk_index(0),    // -- ditto --
   540   _ser_pmc_preclean_ovflw(0),
   541   _ser_kac_preclean_ovflw(0),
   542   _ser_pmc_remark_ovflw(0),
   543   _par_pmc_remark_ovflw(0),
   544   _ser_kac_ovflw(0),
   545   _par_kac_ovflw(0),
   546 #ifndef PRODUCT
   547   _num_par_pushes(0),
   548 #endif
   549   _collection_count_start(0),
   550   _verifying(false),
   551   _icms_start_limit(NULL),
   552   _icms_stop_limit(NULL),
   553   _verification_mark_bm(0, Mutex::leaf + 1, "CMS_verification_mark_bm_lock"),
   554   _completed_initialization(false),
   555   _collector_policy(cp),
   556   _should_unload_classes(false),
   557   _concurrent_cycles_since_last_unload(0),
   558   _sweep_estimate(CMS_SweepWeight, CMS_SweepPadding)
   559 {
   560   if (ExplicitGCInvokesConcurrentAndUnloadsClasses) {
   561     ExplicitGCInvokesConcurrent = true;
   562   }
   563   // Now expand the span and allocate the collection support structures
   564   // (MUT, marking bit map etc.) to cover both generations subject to
   565   // collection.
   567   // First check that _permGen is adjacent to _cmsGen and above it.
   568   assert(   _cmsGen->reserved().word_size()  > 0
   569          && _permGen->reserved().word_size() > 0,
   570          "generations should not be of zero size");
   571   assert(_cmsGen->reserved().intersection(_permGen->reserved()).is_empty(),
   572          "_cmsGen and _permGen should not overlap");
   573   assert(_cmsGen->reserved().end() == _permGen->reserved().start(),
   574          "_cmsGen->end() different from _permGen->start()");
   576   // For use by dirty card to oop closures.
   577   _cmsGen->cmsSpace()->set_collector(this);
   578   _permGen->cmsSpace()->set_collector(this);
   580   // Allocate MUT and marking bit map
   581   {
   582     MutexLockerEx x(_markBitMap.lock(), Mutex::_no_safepoint_check_flag);
   583     if (!_markBitMap.allocate(_span)) {
   584       warning("Failed to allocate CMS Bit Map");
   585       return;
   586     }
   587     assert(_markBitMap.covers(_span), "_markBitMap inconsistency?");
   588   }
   589   {
   590     _modUnionTable.allocate(_span);
   591     assert(_modUnionTable.covers(_span), "_modUnionTable inconsistency?");
   592   }
   594   if (!_markStack.allocate(CMSMarkStackSize)) {
   595     warning("Failed to allocate CMS Marking Stack");
   596     return;
   597   }
   598   if (!_revisitStack.allocate(CMSRevisitStackSize)) {
   599     warning("Failed to allocate CMS Revisit Stack");
   600     return;
   601   }
   603   // Support for multi-threaded concurrent phases
   604   if (ParallelGCThreads > 0 && CMSConcurrentMTEnabled) {
   605     if (FLAG_IS_DEFAULT(ParallelCMSThreads)) {
   606       // just for now
   607       FLAG_SET_DEFAULT(ParallelCMSThreads, (ParallelGCThreads + 3)/4);
   608     }
   609     if (ParallelCMSThreads > 1) {
   610       _conc_workers = new YieldingFlexibleWorkGang("Parallel CMS Threads",
   611                                  ParallelCMSThreads, true);
   612       if (_conc_workers == NULL) {
   613         warning("GC/CMS: _conc_workers allocation failure: "
   614               "forcing -CMSConcurrentMTEnabled");
   615         CMSConcurrentMTEnabled = false;
   616       }
   617     } else {
   618       CMSConcurrentMTEnabled = false;
   619     }
   620   }
   621   if (!CMSConcurrentMTEnabled) {
   622     ParallelCMSThreads = 0;
   623   } else {
   624     // Turn off CMSCleanOnEnter optimization temporarily for
   625     // the MT case where it's not fixed yet; see 6178663.
   626     CMSCleanOnEnter = false;
   627   }
   628   assert((_conc_workers != NULL) == (ParallelCMSThreads > 1),
   629          "Inconsistency");
   631   // Parallel task queues; these are shared for the
   632   // concurrent and stop-world phases of CMS, but
   633   // are not shared with parallel scavenge (ParNew).
   634   {
   635     uint i;
   636     uint num_queues = (uint) MAX2(ParallelGCThreads, ParallelCMSThreads);
   638     if ((CMSParallelRemarkEnabled || CMSConcurrentMTEnabled
   639          || ParallelRefProcEnabled)
   640         && num_queues > 0) {
   641       _task_queues = new OopTaskQueueSet(num_queues);
   642       if (_task_queues == NULL) {
   643         warning("task_queues allocation failure.");
   644         return;
   645       }
   646       _hash_seed = NEW_C_HEAP_ARRAY(int, num_queues);
   647       if (_hash_seed == NULL) {
   648         warning("_hash_seed array allocation failure");
   649         return;
   650       }
   652       // XXX use a global constant instead of 64!
   653       typedef struct OopTaskQueuePadded {
   654         OopTaskQueue work_queue;
   655         char pad[64 - sizeof(OopTaskQueue)];  // prevent false sharing
   656       } OopTaskQueuePadded;
   658       for (i = 0; i < num_queues; i++) {
   659         OopTaskQueuePadded *q_padded = new OopTaskQueuePadded();
   660         if (q_padded == NULL) {
   661           warning("work_queue allocation failure.");
   662           return;
   663         }
   664         _task_queues->register_queue(i, &q_padded->work_queue);
   665       }
   666       for (i = 0; i < num_queues; i++) {
   667         _task_queues->queue(i)->initialize();
   668         _hash_seed[i] = 17;  // copied from ParNew
   669       }
   670     }
   671   }
   673   _cmsGen ->init_initiating_occupancy(CMSInitiatingOccupancyFraction, CMSTriggerRatio);
   674   _permGen->init_initiating_occupancy(CMSInitiatingPermOccupancyFraction, CMSTriggerPermRatio);
   676   // Clip CMSBootstrapOccupancy between 0 and 100.
   677   _bootstrap_occupancy = ((double)MIN2((uintx)100, MAX2((uintx)0, CMSBootstrapOccupancy)))
   678                          /(double)100;
   680   _full_gcs_since_conc_gc = 0;
   682   // Now tell CMS generations the identity of their collector
   683   ConcurrentMarkSweepGeneration::set_collector(this);
   685   // Create & start a CMS thread for this CMS collector
   686   _cmsThread = ConcurrentMarkSweepThread::start(this);
   687   assert(cmsThread() != NULL, "CMS Thread should have been created");
   688   assert(cmsThread()->collector() == this,
   689          "CMS Thread should refer to this gen");
   690   assert(CGC_lock != NULL, "Where's the CGC_lock?");
   692   // Support for parallelizing young gen rescan
   693   GenCollectedHeap* gch = GenCollectedHeap::heap();
   694   _young_gen = gch->prev_gen(_cmsGen);
   695   if (gch->supports_inline_contig_alloc()) {
   696     _top_addr = gch->top_addr();
   697     _end_addr = gch->end_addr();
   698     assert(_young_gen != NULL, "no _young_gen");
   699     _eden_chunk_index = 0;
   700     _eden_chunk_capacity = (_young_gen->max_capacity()+CMSSamplingGrain)/CMSSamplingGrain;
   701     _eden_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, _eden_chunk_capacity);
   702     if (_eden_chunk_array == NULL) {
   703       _eden_chunk_capacity = 0;
   704       warning("GC/CMS: _eden_chunk_array allocation failure");
   705     }
   706   }
   707   assert(_eden_chunk_array != NULL || _eden_chunk_capacity == 0, "Error");
   709   // Support for parallelizing survivor space rescan
   710   if (CMSParallelRemarkEnabled && CMSParallelSurvivorRemarkEnabled) {
   711     size_t max_plab_samples = MaxNewSize/((SurvivorRatio+2)*MinTLABSize);
   712     _survivor_plab_array  = NEW_C_HEAP_ARRAY(ChunkArray, ParallelGCThreads);
   713     _survivor_chunk_array = NEW_C_HEAP_ARRAY(HeapWord*, 2*max_plab_samples);
   714     _cursor               = NEW_C_HEAP_ARRAY(size_t, ParallelGCThreads);
   715     if (_survivor_plab_array == NULL || _survivor_chunk_array == NULL
   716         || _cursor == NULL) {
   717       warning("Failed to allocate survivor plab/chunk array");
   718       if (_survivor_plab_array  != NULL) {
   719         FREE_C_HEAP_ARRAY(ChunkArray, _survivor_plab_array);
   720         _survivor_plab_array = NULL;
   721       }
   722       if (_survivor_chunk_array != NULL) {
   723         FREE_C_HEAP_ARRAY(HeapWord*, _survivor_chunk_array);
   724         _survivor_chunk_array = NULL;
   725       }
   726       if (_cursor != NULL) {
   727         FREE_C_HEAP_ARRAY(size_t, _cursor);
   728         _cursor = NULL;
   729       }
   730     } else {
   731       _survivor_chunk_capacity = 2*max_plab_samples;
   732       for (uint i = 0; i < ParallelGCThreads; i++) {
   733         HeapWord** vec = NEW_C_HEAP_ARRAY(HeapWord*, max_plab_samples);
   734         if (vec == NULL) {
   735           warning("Failed to allocate survivor plab array");
   736           for (int j = i; j > 0; j--) {
   737             FREE_C_HEAP_ARRAY(HeapWord*, _survivor_plab_array[j-1].array());
   738           }
   739           FREE_C_HEAP_ARRAY(ChunkArray, _survivor_plab_array);
   740           FREE_C_HEAP_ARRAY(HeapWord*, _survivor_chunk_array);
   741           _survivor_plab_array = NULL;
   742           _survivor_chunk_array = NULL;
   743           _survivor_chunk_capacity = 0;
   744           break;
   745         } else {
   746           ChunkArray* cur =
   747             ::new (&_survivor_plab_array[i]) ChunkArray(vec,
   748                                                         max_plab_samples);
   749           assert(cur->end() == 0, "Should be 0");
   750           assert(cur->array() == vec, "Should be vec");
   751           assert(cur->capacity() == max_plab_samples, "Error");
   752         }
   753       }
   754     }
   755   }
   756   assert(   (   _survivor_plab_array  != NULL
   757              && _survivor_chunk_array != NULL)
   758          || (   _survivor_chunk_capacity == 0
   759              && _survivor_chunk_index == 0),
   760          "Error");
   762   // Choose what strong roots should be scanned depending on verification options
   763   // and perm gen collection mode.
   764   if (!CMSClassUnloadingEnabled) {
   765     // If class unloading is disabled we want to include all classes into the root set.
   766     add_root_scanning_option(SharedHeap::SO_AllClasses);
   767   } else {
   768     add_root_scanning_option(SharedHeap::SO_SystemClasses);
   769   }
   771   NOT_PRODUCT(_overflow_counter = CMSMarkStackOverflowInterval;)
   772   _gc_counters = new CollectorCounters("CMS", 1);
   773   _completed_initialization = true;
   774   _sweep_timer.start();  // start of time
   775 }
   777 const char* ConcurrentMarkSweepGeneration::name() const {
   778   return "concurrent mark-sweep generation";
   779 }
   780 void ConcurrentMarkSweepGeneration::update_counters() {
   781   if (UsePerfData) {
   782     _space_counters->update_all();
   783     _gen_counters->update_all();
   784   }
   785 }
   787 // this is an optimized version of update_counters(). it takes the
   788 // used value as a parameter rather than computing it.
   789 //
   790 void ConcurrentMarkSweepGeneration::update_counters(size_t used) {
   791   if (UsePerfData) {
   792     _space_counters->update_used(used);
   793     _space_counters->update_capacity();
   794     _gen_counters->update_all();
   795   }
   796 }
   798 void ConcurrentMarkSweepGeneration::print() const {
   799   Generation::print();
   800   cmsSpace()->print();
   801 }
   803 #ifndef PRODUCT
   804 void ConcurrentMarkSweepGeneration::print_statistics() {
   805   cmsSpace()->printFLCensus(0);
   806 }
   807 #endif
   809 void ConcurrentMarkSweepGeneration::printOccupancy(const char *s) {
   810   GenCollectedHeap* gch = GenCollectedHeap::heap();
   811   if (PrintGCDetails) {
   812     if (Verbose) {
   813       gclog_or_tty->print(" [%d %s-%s: "SIZE_FORMAT"("SIZE_FORMAT")]",
   814         level(), short_name(), s, used(), capacity());
   815     } else {
   816       gclog_or_tty->print(" [%d %s-%s: "SIZE_FORMAT"K("SIZE_FORMAT"K)]",
   817         level(), short_name(), s, used() / K, capacity() / K);
   818     }
   819   }
   820   if (Verbose) {
   821     gclog_or_tty->print(" "SIZE_FORMAT"("SIZE_FORMAT")",
   822               gch->used(), gch->capacity());
   823   } else {
   824     gclog_or_tty->print(" "SIZE_FORMAT"K("SIZE_FORMAT"K)",
   825               gch->used() / K, gch->capacity() / K);
   826   }
   827 }
   829 size_t
   830 ConcurrentMarkSweepGeneration::contiguous_available() const {
   831   // dld proposes an improvement in precision here. If the committed
   832   // part of the space ends in a free block we should add that to
   833   // uncommitted size in the calculation below. Will make this
   834   // change later, staying with the approximation below for the
   835   // time being. -- ysr.
   836   return MAX2(_virtual_space.uncommitted_size(), unsafe_max_alloc_nogc());
   837 }
   839 size_t
   840 ConcurrentMarkSweepGeneration::unsafe_max_alloc_nogc() const {
   841   return _cmsSpace->max_alloc_in_words() * HeapWordSize;
   842 }
   844 size_t ConcurrentMarkSweepGeneration::max_available() const {
   845   return free() + _virtual_space.uncommitted_size();
   846 }
   848 bool ConcurrentMarkSweepGeneration::promotion_attempt_is_safe(
   849     size_t max_promotion_in_bytes,
   850     bool younger_handles_promotion_failure) const {
   852   // This is the most conservative test.  Full promotion is
   853   // guaranteed if this is used. The multiplicative factor is to
   854   // account for the worst case "dilatation".
   855   double adjusted_max_promo_bytes = _dilatation_factor * max_promotion_in_bytes;
   856   if (adjusted_max_promo_bytes > (double)max_uintx) { // larger than size_t
   857     adjusted_max_promo_bytes = (double)max_uintx;
   858   }
   859   bool result = (max_contiguous_available() >= (size_t)adjusted_max_promo_bytes);
   861   if (younger_handles_promotion_failure && !result) {
   862     // Full promotion is not guaranteed because fragmentation
   863     // of the cms generation can prevent the full promotion.
   864     result = (max_available() >= (size_t)adjusted_max_promo_bytes);
   866     if (!result) {
   867       // With promotion failure handling the test for the ability
   868       // to support the promotion does not have to be guaranteed.
   869       // Use an average of the amount promoted.
   870       result = max_available() >= (size_t)
   871         gc_stats()->avg_promoted()->padded_average();
   872       if (PrintGC && Verbose && result) {
   873         gclog_or_tty->print_cr(
   874           "\nConcurrentMarkSweepGeneration::promotion_attempt_is_safe"
   875           " max_available: " SIZE_FORMAT
   876           " avg_promoted: " SIZE_FORMAT,
   877           max_available(), (size_t)
   878           gc_stats()->avg_promoted()->padded_average());
   879       }
   880     } else {
   881       if (PrintGC && Verbose) {
   882         gclog_or_tty->print_cr(
   883           "\nConcurrentMarkSweepGeneration::promotion_attempt_is_safe"
   884           " max_available: " SIZE_FORMAT
   885           " adj_max_promo_bytes: " SIZE_FORMAT,
   886           max_available(), (size_t)adjusted_max_promo_bytes);
   887       }
   888     }
   889   } else {
   890     if (PrintGC && Verbose) {
   891       gclog_or_tty->print_cr(
   892         "\nConcurrentMarkSweepGeneration::promotion_attempt_is_safe"
   893         " contiguous_available: " SIZE_FORMAT
   894         " adj_max_promo_bytes: " SIZE_FORMAT,
   895         max_contiguous_available(), (size_t)adjusted_max_promo_bytes);
   896     }
   897   }
   898   return result;
   899 }
   901 CompactibleSpace*
   902 ConcurrentMarkSweepGeneration::first_compaction_space() const {
   903   return _cmsSpace;
   904 }
   906 void ConcurrentMarkSweepGeneration::reset_after_compaction() {
   907   // Clear the promotion information.  These pointers can be adjusted
   908   // along with all the other pointers into the heap but
   909   // compaction is expected to be a rare event with
   910   // a heap using cms so don't do it without seeing the need.
   911   if (ParallelGCThreads > 0) {
   912     for (uint i = 0; i < ParallelGCThreads; i++) {
   913       _par_gc_thread_states[i]->promo.reset();
   914     }
   915   }
   916 }
   918 void ConcurrentMarkSweepGeneration::space_iterate(SpaceClosure* blk, bool usedOnly) {
   919   blk->do_space(_cmsSpace);
   920 }
   922 void ConcurrentMarkSweepGeneration::compute_new_size() {
   923   assert_locked_or_safepoint(Heap_lock);
   925   // If incremental collection failed, we just want to expand
   926   // to the limit.
   927   if (incremental_collection_failed()) {
   928     clear_incremental_collection_failed();
   929     grow_to_reserved();
   930     return;
   931   }
   933   size_t expand_bytes = 0;
   934   double free_percentage = ((double) free()) / capacity();
   935   double desired_free_percentage = (double) MinHeapFreeRatio / 100;
   936   double maximum_free_percentage = (double) MaxHeapFreeRatio / 100;
   938   // compute expansion delta needed for reaching desired free percentage
   939   if (free_percentage < desired_free_percentage) {
   940     size_t desired_capacity = (size_t)(used() / ((double) 1 - desired_free_percentage));
   941     assert(desired_capacity >= capacity(), "invalid expansion size");
   942     expand_bytes = MAX2(desired_capacity - capacity(), MinHeapDeltaBytes);
   943   }
   944   if (expand_bytes > 0) {
   945     if (PrintGCDetails && Verbose) {
   946       size_t desired_capacity = (size_t)(used() / ((double) 1 - desired_free_percentage));
   947       gclog_or_tty->print_cr("\nFrom compute_new_size: ");
   948       gclog_or_tty->print_cr("  Free fraction %f", free_percentage);
   949       gclog_or_tty->print_cr("  Desired free fraction %f",
   950         desired_free_percentage);
   951       gclog_or_tty->print_cr("  Maximum free fraction %f",
   952         maximum_free_percentage);
   953       gclog_or_tty->print_cr("  Capactiy "SIZE_FORMAT, capacity()/1000);
   954       gclog_or_tty->print_cr("  Desired capacity "SIZE_FORMAT,
   955         desired_capacity/1000);
   956       int prev_level = level() - 1;
   957       if (prev_level >= 0) {
   958         size_t prev_size = 0;
   959         GenCollectedHeap* gch = GenCollectedHeap::heap();
   960         Generation* prev_gen = gch->_gens[prev_level];
   961         prev_size = prev_gen->capacity();
   962           gclog_or_tty->print_cr("  Younger gen size "SIZE_FORMAT,
   963                                  prev_size/1000);
   964       }
   965       gclog_or_tty->print_cr("  unsafe_max_alloc_nogc "SIZE_FORMAT,
   966         unsafe_max_alloc_nogc()/1000);
   967       gclog_or_tty->print_cr("  contiguous available "SIZE_FORMAT,
   968         contiguous_available()/1000);
   969       gclog_or_tty->print_cr("  Expand by "SIZE_FORMAT" (bytes)",
   970         expand_bytes);
   971     }
   972     // safe if expansion fails
   973     expand(expand_bytes, 0, CMSExpansionCause::_satisfy_free_ratio);
   974     if (PrintGCDetails && Verbose) {
   975       gclog_or_tty->print_cr("  Expanded free fraction %f",
   976         ((double) free()) / capacity());
   977     }
   978   }
   979 }
   981 Mutex* ConcurrentMarkSweepGeneration::freelistLock() const {
   982   return cmsSpace()->freelistLock();
   983 }
   985 HeapWord* ConcurrentMarkSweepGeneration::allocate(size_t size,
   986                                                   bool   tlab) {
   987   CMSSynchronousYieldRequest yr;
   988   MutexLockerEx x(freelistLock(),
   989                   Mutex::_no_safepoint_check_flag);
   990   return have_lock_and_allocate(size, tlab);
   991 }
   993 HeapWord* ConcurrentMarkSweepGeneration::have_lock_and_allocate(size_t size,
   994                                                   bool   tlab) {
   995   assert_lock_strong(freelistLock());
   996   size_t adjustedSize = CompactibleFreeListSpace::adjustObjectSize(size);
   997   HeapWord* res = cmsSpace()->allocate(adjustedSize);
   998   // Allocate the object live (grey) if the background collector has
   999   // started marking. This is necessary because the marker may
  1000   // have passed this address and consequently this object will
  1001   // not otherwise be greyed and would be incorrectly swept up.
  1002   // Note that if this object contains references, the writing
  1003   // of those references will dirty the card containing this object
  1004   // allowing the object to be blackened (and its references scanned)
  1005   // either during a preclean phase or at the final checkpoint.
  1006   if (res != NULL) {
  1007     collector()->direct_allocated(res, adjustedSize);
  1008     _direct_allocated_words += adjustedSize;
  1009     // allocation counters
  1010     NOT_PRODUCT(
  1011       _numObjectsAllocated++;
  1012       _numWordsAllocated += (int)adjustedSize;
  1015   return res;
  1018 // In the case of direct allocation by mutators in a generation that
  1019 // is being concurrently collected, the object must be allocated
  1020 // live (grey) if the background collector has started marking.
  1021 // This is necessary because the marker may
  1022 // have passed this address and consequently this object will
  1023 // not otherwise be greyed and would be incorrectly swept up.
  1024 // Note that if this object contains references, the writing
  1025 // of those references will dirty the card containing this object
  1026 // allowing the object to be blackened (and its references scanned)
  1027 // either during a preclean phase or at the final checkpoint.
  1028 void CMSCollector::direct_allocated(HeapWord* start, size_t size) {
  1029   assert(_markBitMap.covers(start, size), "Out of bounds");
  1030   if (_collectorState >= Marking) {
  1031     MutexLockerEx y(_markBitMap.lock(),
  1032                     Mutex::_no_safepoint_check_flag);
  1033     // [see comments preceding SweepClosure::do_blk() below for details]
  1034     // 1. need to mark the object as live so it isn't collected
  1035     // 2. need to mark the 2nd bit to indicate the object may be uninitialized
  1036     // 3. need to mark the end of the object so sweeper can skip over it
  1037     //    if it's uninitialized when the sweeper reaches it.
  1038     _markBitMap.mark(start);          // object is live
  1039     _markBitMap.mark(start + 1);      // object is potentially uninitialized?
  1040     _markBitMap.mark(start + size - 1);
  1041                                       // mark end of object
  1043   // check that oop looks uninitialized
  1044   assert(oop(start)->klass_or_null() == NULL, "_klass should be NULL");
  1047 void CMSCollector::promoted(bool par, HeapWord* start,
  1048                             bool is_obj_array, size_t obj_size) {
  1049   assert(_markBitMap.covers(start), "Out of bounds");
  1050   // See comment in direct_allocated() about when objects should
  1051   // be allocated live.
  1052   if (_collectorState >= Marking) {
  1053     // we already hold the marking bit map lock, taken in
  1054     // the prologue
  1055     if (par) {
  1056       _markBitMap.par_mark(start);
  1057     } else {
  1058       _markBitMap.mark(start);
  1060     // We don't need to mark the object as uninitialized (as
  1061     // in direct_allocated above) because this is being done with the
  1062     // world stopped and the object will be initialized by the
  1063     // time the sweeper gets to look at it.
  1064     assert(SafepointSynchronize::is_at_safepoint(),
  1065            "expect promotion only at safepoints");
  1067     if (_collectorState < Sweeping) {
  1068       // Mark the appropriate cards in the modUnionTable, so that
  1069       // this object gets scanned before the sweep. If this is
  1070       // not done, CMS generation references in the object might
  1071       // not get marked.
  1072       // For the case of arrays, which are otherwise precisely
  1073       // marked, we need to dirty the entire array, not just its head.
  1074       if (is_obj_array) {
  1075         // The [par_]mark_range() method expects mr.end() below to
  1076         // be aligned to the granularity of a bit's representation
  1077         // in the heap. In the case of the MUT below, that's a
  1078         // card size.
  1079         MemRegion mr(start,
  1080                      (HeapWord*)round_to((intptr_t)(start + obj_size),
  1081                         CardTableModRefBS::card_size /* bytes */));
  1082         if (par) {
  1083           _modUnionTable.par_mark_range(mr);
  1084         } else {
  1085           _modUnionTable.mark_range(mr);
  1087       } else {  // not an obj array; we can just mark the head
  1088         if (par) {
  1089           _modUnionTable.par_mark(start);
  1090         } else {
  1091           _modUnionTable.mark(start);
  1098 static inline size_t percent_of_space(Space* space, HeapWord* addr)
  1100   size_t delta = pointer_delta(addr, space->bottom());
  1101   return (size_t)(delta * 100.0 / (space->capacity() / HeapWordSize));
  1104 void CMSCollector::icms_update_allocation_limits()
  1106   Generation* gen0 = GenCollectedHeap::heap()->get_gen(0);
  1107   EdenSpace* eden = gen0->as_DefNewGeneration()->eden();
  1109   const unsigned int duty_cycle = stats().icms_update_duty_cycle();
  1110   if (CMSTraceIncrementalPacing) {
  1111     stats().print();
  1114   assert(duty_cycle <= 100, "invalid duty cycle");
  1115   if (duty_cycle != 0) {
  1116     // The duty_cycle is a percentage between 0 and 100; convert to words and
  1117     // then compute the offset from the endpoints of the space.
  1118     size_t free_words = eden->free() / HeapWordSize;
  1119     double free_words_dbl = (double)free_words;
  1120     size_t duty_cycle_words = (size_t)(free_words_dbl * duty_cycle / 100.0);
  1121     size_t offset_words = (free_words - duty_cycle_words) / 2;
  1123     _icms_start_limit = eden->top() + offset_words;
  1124     _icms_stop_limit = eden->end() - offset_words;
  1126     // The limits may be adjusted (shifted to the right) by
  1127     // CMSIncrementalOffset, to allow the application more mutator time after a
  1128     // young gen gc (when all mutators were stopped) and before CMS starts and
  1129     // takes away one or more cpus.
  1130     if (CMSIncrementalOffset != 0) {
  1131       double adjustment_dbl = free_words_dbl * CMSIncrementalOffset / 100.0;
  1132       size_t adjustment = (size_t)adjustment_dbl;
  1133       HeapWord* tmp_stop = _icms_stop_limit + adjustment;
  1134       if (tmp_stop > _icms_stop_limit && tmp_stop < eden->end()) {
  1135         _icms_start_limit += adjustment;
  1136         _icms_stop_limit = tmp_stop;
  1140   if (duty_cycle == 0 || (_icms_start_limit == _icms_stop_limit)) {
  1141     _icms_start_limit = _icms_stop_limit = eden->end();
  1144   // Install the new start limit.
  1145   eden->set_soft_end(_icms_start_limit);
  1147   if (CMSTraceIncrementalMode) {
  1148     gclog_or_tty->print(" icms alloc limits:  "
  1149                            PTR_FORMAT "," PTR_FORMAT
  1150                            " (" SIZE_FORMAT "%%," SIZE_FORMAT "%%) ",
  1151                            _icms_start_limit, _icms_stop_limit,
  1152                            percent_of_space(eden, _icms_start_limit),
  1153                            percent_of_space(eden, _icms_stop_limit));
  1154     if (Verbose) {
  1155       gclog_or_tty->print("eden:  ");
  1156       eden->print_on(gclog_or_tty);
  1161 // Any changes here should try to maintain the invariant
  1162 // that if this method is called with _icms_start_limit
  1163 // and _icms_stop_limit both NULL, then it should return NULL
  1164 // and not notify the icms thread.
  1165 HeapWord*
  1166 CMSCollector::allocation_limit_reached(Space* space, HeapWord* top,
  1167                                        size_t word_size)
  1169   // A start_limit equal to end() means the duty cycle is 0, so treat that as a
  1170   // nop.
  1171   if (CMSIncrementalMode && _icms_start_limit != space->end()) {
  1172     if (top <= _icms_start_limit) {
  1173       if (CMSTraceIncrementalMode) {
  1174         space->print_on(gclog_or_tty);
  1175         gclog_or_tty->stamp();
  1176         gclog_or_tty->print_cr(" start limit top=" PTR_FORMAT
  1177                                ", new limit=" PTR_FORMAT
  1178                                " (" SIZE_FORMAT "%%)",
  1179                                top, _icms_stop_limit,
  1180                                percent_of_space(space, _icms_stop_limit));
  1182       ConcurrentMarkSweepThread::start_icms();
  1183       assert(top < _icms_stop_limit, "Tautology");
  1184       if (word_size < pointer_delta(_icms_stop_limit, top)) {
  1185         return _icms_stop_limit;
  1188       // The allocation will cross both the _start and _stop limits, so do the
  1189       // stop notification also and return end().
  1190       if (CMSTraceIncrementalMode) {
  1191         space->print_on(gclog_or_tty);
  1192         gclog_or_tty->stamp();
  1193         gclog_or_tty->print_cr(" +stop limit top=" PTR_FORMAT
  1194                                ", new limit=" PTR_FORMAT
  1195                                " (" SIZE_FORMAT "%%)",
  1196                                top, space->end(),
  1197                                percent_of_space(space, space->end()));
  1199       ConcurrentMarkSweepThread::stop_icms();
  1200       return space->end();
  1203     if (top <= _icms_stop_limit) {
  1204       if (CMSTraceIncrementalMode) {
  1205         space->print_on(gclog_or_tty);
  1206         gclog_or_tty->stamp();
  1207         gclog_or_tty->print_cr(" stop limit top=" PTR_FORMAT
  1208                                ", new limit=" PTR_FORMAT
  1209                                " (" SIZE_FORMAT "%%)",
  1210                                top, space->end(),
  1211                                percent_of_space(space, space->end()));
  1213       ConcurrentMarkSweepThread::stop_icms();
  1214       return space->end();
  1217     if (CMSTraceIncrementalMode) {
  1218       space->print_on(gclog_or_tty);
  1219       gclog_or_tty->stamp();
  1220       gclog_or_tty->print_cr(" end limit top=" PTR_FORMAT
  1221                              ", new limit=" PTR_FORMAT,
  1222                              top, NULL);
  1226   return NULL;
  1229 oop ConcurrentMarkSweepGeneration::promote(oop obj, size_t obj_size) {
  1230   assert(obj_size == (size_t)obj->size(), "bad obj_size passed in");
  1231   // allocate, copy and if necessary update promoinfo --
  1232   // delegate to underlying space.
  1233   assert_lock_strong(freelistLock());
  1235 #ifndef PRODUCT
  1236   if (Universe::heap()->promotion_should_fail()) {
  1237     return NULL;
  1239 #endif  // #ifndef PRODUCT
  1241   oop res = _cmsSpace->promote(obj, obj_size);
  1242   if (res == NULL) {
  1243     // expand and retry
  1244     size_t s = _cmsSpace->expansionSpaceRequired(obj_size);  // HeapWords
  1245     expand(s*HeapWordSize, MinHeapDeltaBytes,
  1246       CMSExpansionCause::_satisfy_promotion);
  1247     // Since there's currently no next generation, we don't try to promote
  1248     // into a more senior generation.
  1249     assert(next_gen() == NULL, "assumption, based upon which no attempt "
  1250                                "is made to pass on a possibly failing "
  1251                                "promotion to next generation");
  1252     res = _cmsSpace->promote(obj, obj_size);
  1254   if (res != NULL) {
  1255     // See comment in allocate() about when objects should
  1256     // be allocated live.
  1257     assert(obj->is_oop(), "Will dereference klass pointer below");
  1258     collector()->promoted(false,           // Not parallel
  1259                           (HeapWord*)res, obj->is_objArray(), obj_size);
  1260     // promotion counters
  1261     NOT_PRODUCT(
  1262       _numObjectsPromoted++;
  1263       _numWordsPromoted +=
  1264         (int)(CompactibleFreeListSpace::adjustObjectSize(obj->size()));
  1267   return res;
  1271 HeapWord*
  1272 ConcurrentMarkSweepGeneration::allocation_limit_reached(Space* space,
  1273                                              HeapWord* top,
  1274                                              size_t word_sz)
  1276   return collector()->allocation_limit_reached(space, top, word_sz);
  1279 // Things to support parallel young-gen collection.
  1280 oop
  1281 ConcurrentMarkSweepGeneration::par_promote(int thread_num,
  1282                                            oop old, markOop m,
  1283                                            size_t word_sz) {
  1284 #ifndef PRODUCT
  1285   if (Universe::heap()->promotion_should_fail()) {
  1286     return NULL;
  1288 #endif  // #ifndef PRODUCT
  1290   CMSParGCThreadState* ps = _par_gc_thread_states[thread_num];
  1291   PromotionInfo* promoInfo = &ps->promo;
  1292   // if we are tracking promotions, then first ensure space for
  1293   // promotion (including spooling space for saving header if necessary).
  1294   // then allocate and copy, then track promoted info if needed.
  1295   // When tracking (see PromotionInfo::track()), the mark word may
  1296   // be displaced and in this case restoration of the mark word
  1297   // occurs in the (oop_since_save_marks_)iterate phase.
  1298   if (promoInfo->tracking() && !promoInfo->ensure_spooling_space()) {
  1299     // Out of space for allocating spooling buffers;
  1300     // try expanding and allocating spooling buffers.
  1301     if (!expand_and_ensure_spooling_space(promoInfo)) {
  1302       return NULL;
  1305   assert(promoInfo->has_spooling_space(), "Control point invariant");
  1306   HeapWord* obj_ptr = ps->lab.alloc(word_sz);
  1307   if (obj_ptr == NULL) {
  1308      obj_ptr = expand_and_par_lab_allocate(ps, word_sz);
  1309      if (obj_ptr == NULL) {
  1310        return NULL;
  1313   oop obj = oop(obj_ptr);
  1314   assert(obj->klass_or_null() == NULL, "Object should be uninitialized here.");
  1315   // Otherwise, copy the object.  Here we must be careful to insert the
  1316   // klass pointer last, since this marks the block as an allocated object.
  1317   // Except with compressed oops it's the mark word.
  1318   HeapWord* old_ptr = (HeapWord*)old;
  1319   if (word_sz > (size_t)oopDesc::header_size()) {
  1320     Copy::aligned_disjoint_words(old_ptr + oopDesc::header_size(),
  1321                                  obj_ptr + oopDesc::header_size(),
  1322                                  word_sz - oopDesc::header_size());
  1325   if (UseCompressedOops) {
  1326     // Copy gap missed by (aligned) header size calculation above
  1327     obj->set_klass_gap(old->klass_gap());
  1330   // Restore the mark word copied above.
  1331   obj->set_mark(m);
  1333   // Now we can track the promoted object, if necessary.  We take care
  1334   // To delay the transition from uninitialized to full object
  1335   // (i.e., insertion of klass pointer) until after, so that it
  1336   // atomically becomes a promoted object.
  1337   if (promoInfo->tracking()) {
  1338     promoInfo->track((PromotedObject*)obj, old->klass());
  1341   // Finally, install the klass pointer (this should be volatile).
  1342   obj->set_klass(old->klass());
  1344   assert(old->is_oop(), "Will dereference klass ptr below");
  1345   collector()->promoted(true,          // parallel
  1346                         obj_ptr, old->is_objArray(), word_sz);
  1348   NOT_PRODUCT(
  1349     Atomic::inc(&_numObjectsPromoted);
  1350     Atomic::add((jint)CompactibleFreeListSpace::adjustObjectSize(obj->size()),
  1351                 &_numWordsPromoted);
  1354   return obj;
  1357 void
  1358 ConcurrentMarkSweepGeneration::
  1359 par_promote_alloc_undo(int thread_num,
  1360                        HeapWord* obj, size_t word_sz) {
  1361   // CMS does not support promotion undo.
  1362   ShouldNotReachHere();
  1365 void
  1366 ConcurrentMarkSweepGeneration::
  1367 par_promote_alloc_done(int thread_num) {
  1368   CMSParGCThreadState* ps = _par_gc_thread_states[thread_num];
  1369   ps->lab.retire();
  1370 #if CFLS_LAB_REFILL_STATS
  1371   if (thread_num == 0) {
  1372     _cmsSpace->print_par_alloc_stats();
  1374 #endif
  1377 void
  1378 ConcurrentMarkSweepGeneration::
  1379 par_oop_since_save_marks_iterate_done(int thread_num) {
  1380   CMSParGCThreadState* ps = _par_gc_thread_states[thread_num];
  1381   ParScanWithoutBarrierClosure* dummy_cl = NULL;
  1382   ps->promo.promoted_oops_iterate_nv(dummy_cl);
  1385 // XXXPERM
  1386 bool ConcurrentMarkSweepGeneration::should_collect(bool   full,
  1387                                                    size_t size,
  1388                                                    bool   tlab)
  1390   // We allow a STW collection only if a full
  1391   // collection was requested.
  1392   return full || should_allocate(size, tlab); // FIX ME !!!
  1393   // This and promotion failure handling are connected at the
  1394   // hip and should be fixed by untying them.
  1397 bool CMSCollector::shouldConcurrentCollect() {
  1398   if (_full_gc_requested) {
  1399     assert(ExplicitGCInvokesConcurrent, "Unexpected state");
  1400     if (Verbose && PrintGCDetails) {
  1401       gclog_or_tty->print_cr("CMSCollector: collect because of explicit "
  1402                              " gc request");
  1404     return true;
  1407   // For debugging purposes, change the type of collection.
  1408   // If the rotation is not on the concurrent collection
  1409   // type, don't start a concurrent collection.
  1410   NOT_PRODUCT(
  1411     if (RotateCMSCollectionTypes &&
  1412         (_cmsGen->debug_collection_type() !=
  1413           ConcurrentMarkSweepGeneration::Concurrent_collection_type)) {
  1414       assert(_cmsGen->debug_collection_type() !=
  1415         ConcurrentMarkSweepGeneration::Unknown_collection_type,
  1416         "Bad cms collection type");
  1417       return false;
  1421   FreelistLocker x(this);
  1422   // ------------------------------------------------------------------
  1423   // Print out lots of information which affects the initiation of
  1424   // a collection.
  1425   if (PrintCMSInitiationStatistics && stats().valid()) {
  1426     gclog_or_tty->print("CMSCollector shouldConcurrentCollect: ");
  1427     gclog_or_tty->stamp();
  1428     gclog_or_tty->print_cr("");
  1429     stats().print_on(gclog_or_tty);
  1430     gclog_or_tty->print_cr("time_until_cms_gen_full %3.7f",
  1431       stats().time_until_cms_gen_full());
  1432     gclog_or_tty->print_cr("free="SIZE_FORMAT, _cmsGen->free());
  1433     gclog_or_tty->print_cr("contiguous_available="SIZE_FORMAT,
  1434                            _cmsGen->contiguous_available());
  1435     gclog_or_tty->print_cr("promotion_rate=%g", stats().promotion_rate());
  1436     gclog_or_tty->print_cr("cms_allocation_rate=%g", stats().cms_allocation_rate());
  1437     gclog_or_tty->print_cr("occupancy=%3.7f", _cmsGen->occupancy());
  1438     gclog_or_tty->print_cr("initiatingOccupancy=%3.7f", _cmsGen->initiating_occupancy());
  1439     gclog_or_tty->print_cr("initiatingPermOccupancy=%3.7f", _permGen->initiating_occupancy());
  1441   // ------------------------------------------------------------------
  1443   // If the estimated time to complete a cms collection (cms_duration())
  1444   // is less than the estimated time remaining until the cms generation
  1445   // is full, start a collection.
  1446   if (!UseCMSInitiatingOccupancyOnly) {
  1447     if (stats().valid()) {
  1448       if (stats().time_until_cms_start() == 0.0) {
  1449         return true;
  1451     } else {
  1452       // We want to conservatively collect somewhat early in order
  1453       // to try and "bootstrap" our CMS/promotion statistics;
  1454       // this branch will not fire after the first successful CMS
  1455       // collection because the stats should then be valid.
  1456       if (_cmsGen->occupancy() >= _bootstrap_occupancy) {
  1457         if (Verbose && PrintGCDetails) {
  1458           gclog_or_tty->print_cr(
  1459             " CMSCollector: collect for bootstrapping statistics:"
  1460             " occupancy = %f, boot occupancy = %f", _cmsGen->occupancy(),
  1461             _bootstrap_occupancy);
  1463         return true;
  1468   // Otherwise, we start a collection cycle if either the perm gen or
  1469   // old gen want a collection cycle started. Each may use
  1470   // an appropriate criterion for making this decision.
  1471   // XXX We need to make sure that the gen expansion
  1472   // criterion dovetails well with this. XXX NEED TO FIX THIS
  1473   if (_cmsGen->should_concurrent_collect()) {
  1474     if (Verbose && PrintGCDetails) {
  1475       gclog_or_tty->print_cr("CMS old gen initiated");
  1477     return true;
  1480   // We start a collection if we believe an incremental collection may fail;
  1481   // this is not likely to be productive in practice because it's probably too
  1482   // late anyway.
  1483   GenCollectedHeap* gch = GenCollectedHeap::heap();
  1484   assert(gch->collector_policy()->is_two_generation_policy(),
  1485          "You may want to check the correctness of the following");
  1486   if (gch->incremental_collection_will_fail()) {
  1487     if (PrintGCDetails && Verbose) {
  1488       gclog_or_tty->print("CMSCollector: collect because incremental collection will fail ");
  1490     return true;
  1493   if (CMSClassUnloadingEnabled && _permGen->should_concurrent_collect()) {
  1494     bool res = update_should_unload_classes();
  1495     if (res) {
  1496       if (Verbose && PrintGCDetails) {
  1497         gclog_or_tty->print_cr("CMS perm gen initiated");
  1499       return true;
  1502   return false;
  1505 // Clear _expansion_cause fields of constituent generations
  1506 void CMSCollector::clear_expansion_cause() {
  1507   _cmsGen->clear_expansion_cause();
  1508   _permGen->clear_expansion_cause();
  1511 // We should be conservative in starting a collection cycle.  To
  1512 // start too eagerly runs the risk of collecting too often in the
  1513 // extreme.  To collect too rarely falls back on full collections,
  1514 // which works, even if not optimum in terms of concurrent work.
  1515 // As a work around for too eagerly collecting, use the flag
  1516 // UseCMSInitiatingOccupancyOnly.  This also has the advantage of
  1517 // giving the user an easily understandable way of controlling the
  1518 // collections.
  1519 // We want to start a new collection cycle if any of the following
  1520 // conditions hold:
  1521 // . our current occupancy exceeds the configured initiating occupancy
  1522 //   for this generation, or
  1523 // . we recently needed to expand this space and have not, since that
  1524 //   expansion, done a collection of this generation, or
  1525 // . the underlying space believes that it may be a good idea to initiate
  1526 //   a concurrent collection (this may be based on criteria such as the
  1527 //   following: the space uses linear allocation and linear allocation is
  1528 //   going to fail, or there is believed to be excessive fragmentation in
  1529 //   the generation, etc... or ...
  1530 // [.(currently done by CMSCollector::shouldConcurrentCollect() only for
  1531 //   the case of the old generation, not the perm generation; see CR 6543076):
  1532 //   we may be approaching a point at which allocation requests may fail because
  1533 //   we will be out of sufficient free space given allocation rate estimates.]
  1534 bool ConcurrentMarkSweepGeneration::should_concurrent_collect() const {
  1536   assert_lock_strong(freelistLock());
  1537   if (occupancy() > initiating_occupancy()) {
  1538     if (PrintGCDetails && Verbose) {
  1539       gclog_or_tty->print(" %s: collect because of occupancy %f / %f  ",
  1540         short_name(), occupancy(), initiating_occupancy());
  1542     return true;
  1544   if (UseCMSInitiatingOccupancyOnly) {
  1545     return false;
  1547   if (expansion_cause() == CMSExpansionCause::_satisfy_allocation) {
  1548     if (PrintGCDetails && Verbose) {
  1549       gclog_or_tty->print(" %s: collect because expanded for allocation ",
  1550         short_name());
  1552     return true;
  1554   if (_cmsSpace->should_concurrent_collect()) {
  1555     if (PrintGCDetails && Verbose) {
  1556       gclog_or_tty->print(" %s: collect because cmsSpace says so ",
  1557         short_name());
  1559     return true;
  1561   return false;
  1564 void ConcurrentMarkSweepGeneration::collect(bool   full,
  1565                                             bool   clear_all_soft_refs,
  1566                                             size_t size,
  1567                                             bool   tlab)
  1569   collector()->collect(full, clear_all_soft_refs, size, tlab);
  1572 void CMSCollector::collect(bool   full,
  1573                            bool   clear_all_soft_refs,
  1574                            size_t size,
  1575                            bool   tlab)
  1577   if (!UseCMSCollectionPassing && _collectorState > Idling) {
  1578     // For debugging purposes skip the collection if the state
  1579     // is not currently idle
  1580     if (TraceCMSState) {
  1581       gclog_or_tty->print_cr("Thread " INTPTR_FORMAT " skipped full:%d CMS state %d",
  1582         Thread::current(), full, _collectorState);
  1584     return;
  1587   // The following "if" branch is present for defensive reasons.
  1588   // In the current uses of this interface, it can be replaced with:
  1589   // assert(!GC_locker.is_active(), "Can't be called otherwise");
  1590   // But I am not placing that assert here to allow future
  1591   // generality in invoking this interface.
  1592   if (GC_locker::is_active()) {
  1593     // A consistency test for GC_locker
  1594     assert(GC_locker::needs_gc(), "Should have been set already");
  1595     // Skip this foreground collection, instead
  1596     // expanding the heap if necessary.
  1597     // Need the free list locks for the call to free() in compute_new_size()
  1598     compute_new_size();
  1599     return;
  1601   acquire_control_and_collect(full, clear_all_soft_refs);
  1602   _full_gcs_since_conc_gc++;
  1606 void CMSCollector::request_full_gc(unsigned int full_gc_count) {
  1607   GenCollectedHeap* gch = GenCollectedHeap::heap();
  1608   unsigned int gc_count = gch->total_full_collections();
  1609   if (gc_count == full_gc_count) {
  1610     MutexLockerEx y(CGC_lock, Mutex::_no_safepoint_check_flag);
  1611     _full_gc_requested = true;
  1612     CGC_lock->notify();   // nudge CMS thread
  1617 // The foreground and background collectors need to coordinate in order
  1618 // to make sure that they do not mutually interfere with CMS collections.
  1619 // When a background collection is active,
  1620 // the foreground collector may need to take over (preempt) and
  1621 // synchronously complete an ongoing collection. Depending on the
  1622 // frequency of the background collections and the heap usage
  1623 // of the application, this preemption can be seldom or frequent.
  1624 // There are only certain
  1625 // points in the background collection that the "collection-baton"
  1626 // can be passed to the foreground collector.
  1627 //
  1628 // The foreground collector will wait for the baton before
  1629 // starting any part of the collection.  The foreground collector
  1630 // will only wait at one location.
  1631 //
  1632 // The background collector will yield the baton before starting a new
  1633 // phase of the collection (e.g., before initial marking, marking from roots,
  1634 // precleaning, final re-mark, sweep etc.)  This is normally done at the head
  1635 // of the loop which switches the phases. The background collector does some
  1636 // of the phases (initial mark, final re-mark) with the world stopped.
  1637 // Because of locking involved in stopping the world,
  1638 // the foreground collector should not block waiting for the background
  1639 // collector when it is doing a stop-the-world phase.  The background
  1640 // collector will yield the baton at an additional point just before
  1641 // it enters a stop-the-world phase.  Once the world is stopped, the
  1642 // background collector checks the phase of the collection.  If the
  1643 // phase has not changed, it proceeds with the collection.  If the
  1644 // phase has changed, it skips that phase of the collection.  See
  1645 // the comments on the use of the Heap_lock in collect_in_background().
  1646 //
  1647 // Variable used in baton passing.
  1648 //   _foregroundGCIsActive - Set to true by the foreground collector when
  1649 //      it wants the baton.  The foreground clears it when it has finished
  1650 //      the collection.
  1651 //   _foregroundGCShouldWait - Set to true by the background collector
  1652 //        when it is running.  The foreground collector waits while
  1653 //      _foregroundGCShouldWait is true.
  1654 //  CGC_lock - monitor used to protect access to the above variables
  1655 //      and to notify the foreground and background collectors.
  1656 //  _collectorState - current state of the CMS collection.
  1657 //
  1658 // The foreground collector
  1659 //   acquires the CGC_lock
  1660 //   sets _foregroundGCIsActive
  1661 //   waits on the CGC_lock for _foregroundGCShouldWait to be false
  1662 //     various locks acquired in preparation for the collection
  1663 //     are released so as not to block the background collector
  1664 //     that is in the midst of a collection
  1665 //   proceeds with the collection
  1666 //   clears _foregroundGCIsActive
  1667 //   returns
  1668 //
  1669 // The background collector in a loop iterating on the phases of the
  1670 //      collection
  1671 //   acquires the CGC_lock
  1672 //   sets _foregroundGCShouldWait
  1673 //   if _foregroundGCIsActive is set
  1674 //     clears _foregroundGCShouldWait, notifies _CGC_lock
  1675 //     waits on _CGC_lock for _foregroundGCIsActive to become false
  1676 //     and exits the loop.
  1677 //   otherwise
  1678 //     proceed with that phase of the collection
  1679 //     if the phase is a stop-the-world phase,
  1680 //       yield the baton once more just before enqueueing
  1681 //       the stop-world CMS operation (executed by the VM thread).
  1682 //   returns after all phases of the collection are done
  1683 //
  1685 void CMSCollector::acquire_control_and_collect(bool full,
  1686         bool clear_all_soft_refs) {
  1687   assert(SafepointSynchronize::is_at_safepoint(), "should be at safepoint");
  1688   assert(!Thread::current()->is_ConcurrentGC_thread(),
  1689          "shouldn't try to acquire control from self!");
  1691   // Start the protocol for acquiring control of the
  1692   // collection from the background collector (aka CMS thread).
  1693   assert(ConcurrentMarkSweepThread::vm_thread_has_cms_token(),
  1694          "VM thread should have CMS token");
  1695   // Remember the possibly interrupted state of an ongoing
  1696   // concurrent collection
  1697   CollectorState first_state = _collectorState;
  1699   // Signal to a possibly ongoing concurrent collection that
  1700   // we want to do a foreground collection.
  1701   _foregroundGCIsActive = true;
  1703   // Disable incremental mode during a foreground collection.
  1704   ICMSDisabler icms_disabler;
  1706   // release locks and wait for a notify from the background collector
  1707   // releasing the locks in only necessary for phases which
  1708   // do yields to improve the granularity of the collection.
  1709   assert_lock_strong(bitMapLock());
  1710   // We need to lock the Free list lock for the space that we are
  1711   // currently collecting.
  1712   assert(haveFreelistLocks(), "Must be holding free list locks");
  1713   bitMapLock()->unlock();
  1714   releaseFreelistLocks();
  1716     MutexLockerEx x(CGC_lock, Mutex::_no_safepoint_check_flag);
  1717     if (_foregroundGCShouldWait) {
  1718       // We are going to be waiting for action for the CMS thread;
  1719       // it had better not be gone (for instance at shutdown)!
  1720       assert(ConcurrentMarkSweepThread::cmst() != NULL,
  1721              "CMS thread must be running");
  1722       // Wait here until the background collector gives us the go-ahead
  1723       ConcurrentMarkSweepThread::clear_CMS_flag(
  1724         ConcurrentMarkSweepThread::CMS_vm_has_token);  // release token
  1725       // Get a possibly blocked CMS thread going:
  1726       //   Note that we set _foregroundGCIsActive true above,
  1727       //   without protection of the CGC_lock.
  1728       CGC_lock->notify();
  1729       assert(!ConcurrentMarkSweepThread::vm_thread_wants_cms_token(),
  1730              "Possible deadlock");
  1731       while (_foregroundGCShouldWait) {
  1732         // wait for notification
  1733         CGC_lock->wait(Mutex::_no_safepoint_check_flag);
  1734         // Possibility of delay/starvation here, since CMS token does
  1735         // not know to give priority to VM thread? Actually, i think
  1736         // there wouldn't be any delay/starvation, but the proof of
  1737         // that "fact" (?) appears non-trivial. XXX 20011219YSR
  1739       ConcurrentMarkSweepThread::set_CMS_flag(
  1740         ConcurrentMarkSweepThread::CMS_vm_has_token);
  1743   // The CMS_token is already held.  Get back the other locks.
  1744   assert(ConcurrentMarkSweepThread::vm_thread_has_cms_token(),
  1745          "VM thread should have CMS token");
  1746   getFreelistLocks();
  1747   bitMapLock()->lock_without_safepoint_check();
  1748   if (TraceCMSState) {
  1749     gclog_or_tty->print_cr("CMS foreground collector has asked for control "
  1750       INTPTR_FORMAT " with first state %d", Thread::current(), first_state);
  1751     gclog_or_tty->print_cr("    gets control with state %d", _collectorState);
  1754   // Check if we need to do a compaction, or if not, whether
  1755   // we need to start the mark-sweep from scratch.
  1756   bool should_compact    = false;
  1757   bool should_start_over = false;
  1758   decide_foreground_collection_type(clear_all_soft_refs,
  1759     &should_compact, &should_start_over);
  1761 NOT_PRODUCT(
  1762   if (RotateCMSCollectionTypes) {
  1763     if (_cmsGen->debug_collection_type() ==
  1764         ConcurrentMarkSweepGeneration::MSC_foreground_collection_type) {
  1765       should_compact = true;
  1766     } else if (_cmsGen->debug_collection_type() ==
  1767                ConcurrentMarkSweepGeneration::MS_foreground_collection_type) {
  1768       should_compact = false;
  1773   if (PrintGCDetails && first_state > Idling) {
  1774     GCCause::Cause cause = GenCollectedHeap::heap()->gc_cause();
  1775     if (GCCause::is_user_requested_gc(cause) ||
  1776         GCCause::is_serviceability_requested_gc(cause)) {
  1777       gclog_or_tty->print(" (concurrent mode interrupted)");
  1778     } else {
  1779       gclog_or_tty->print(" (concurrent mode failure)");
  1783   if (should_compact) {
  1784     // If the collection is being acquired from the background
  1785     // collector, there may be references on the discovered
  1786     // references lists that have NULL referents (being those
  1787     // that were concurrently cleared by a mutator) or
  1788     // that are no longer active (having been enqueued concurrently
  1789     // by the mutator).
  1790     // Scrub the list of those references because Mark-Sweep-Compact
  1791     // code assumes referents are not NULL and that all discovered
  1792     // Reference objects are active.
  1793     ref_processor()->clean_up_discovered_references();
  1795     do_compaction_work(clear_all_soft_refs);
  1797     // Has the GC time limit been exceeded?
  1798     check_gc_time_limit();
  1800   } else {
  1801     do_mark_sweep_work(clear_all_soft_refs, first_state,
  1802       should_start_over);
  1804   // Reset the expansion cause, now that we just completed
  1805   // a collection cycle.
  1806   clear_expansion_cause();
  1807   _foregroundGCIsActive = false;
  1808   return;
  1811 void CMSCollector::check_gc_time_limit() {
  1813   // Ignore explicit GC's.  Exiting here does not set the flag and
  1814   // does not reset the count.  Updating of the averages for system
  1815   // GC's is still controlled by UseAdaptiveSizePolicyWithSystemGC.
  1816   GCCause::Cause gc_cause = GenCollectedHeap::heap()->gc_cause();
  1817   if (GCCause::is_user_requested_gc(gc_cause) ||
  1818       GCCause::is_serviceability_requested_gc(gc_cause)) {
  1819     return;
  1822   // Calculate the fraction of the CMS generation was freed during
  1823   // the last collection.
  1824   // Only consider the STW compacting cost for now.
  1825   //
  1826   // Note that the gc time limit test only works for the collections
  1827   // of the young gen + tenured gen and not for collections of the
  1828   // permanent gen.  That is because the calculation of the space
  1829   // freed by the collection is the free space in the young gen +
  1830   // tenured gen.
  1832   double fraction_free =
  1833     ((double)_cmsGen->free())/((double)_cmsGen->max_capacity());
  1834   if ((100.0 * size_policy()->compacting_gc_cost()) >
  1835          ((double) GCTimeLimit) &&
  1836         ((fraction_free * 100) < GCHeapFreeLimit)) {
  1837     size_policy()->inc_gc_time_limit_count();
  1838     if (UseGCOverheadLimit &&
  1839         (size_policy()->gc_time_limit_count() >
  1840          AdaptiveSizePolicyGCTimeLimitThreshold)) {
  1841       size_policy()->set_gc_time_limit_exceeded(true);
  1842       // Avoid consecutive OOM due to the gc time limit by resetting
  1843       // the counter.
  1844       size_policy()->reset_gc_time_limit_count();
  1845       if (PrintGCDetails) {
  1846         gclog_or_tty->print_cr("      GC is exceeding overhead limit "
  1847           "of %d%%", GCTimeLimit);
  1849     } else {
  1850       if (PrintGCDetails) {
  1851         gclog_or_tty->print_cr("      GC would exceed overhead limit "
  1852           "of %d%%", GCTimeLimit);
  1855   } else {
  1856     size_policy()->reset_gc_time_limit_count();
  1860 // Resize the perm generation and the tenured generation
  1861 // after obtaining the free list locks for the
  1862 // two generations.
  1863 void CMSCollector::compute_new_size() {
  1864   assert_locked_or_safepoint(Heap_lock);
  1865   FreelistLocker z(this);
  1866   _permGen->compute_new_size();
  1867   _cmsGen->compute_new_size();
  1870 // A work method used by foreground collection to determine
  1871 // what type of collection (compacting or not, continuing or fresh)
  1872 // it should do.
  1873 // NOTE: the intent is to make UseCMSCompactAtFullCollection
  1874 // and CMSCompactWhenClearAllSoftRefs the default in the future
  1875 // and do away with the flags after a suitable period.
  1876 void CMSCollector::decide_foreground_collection_type(
  1877   bool clear_all_soft_refs, bool* should_compact,
  1878   bool* should_start_over) {
  1879   // Normally, we'll compact only if the UseCMSCompactAtFullCollection
  1880   // flag is set, and we have either requested a System.gc() or
  1881   // the number of full gc's since the last concurrent cycle
  1882   // has exceeded the threshold set by CMSFullGCsBeforeCompaction,
  1883   // or if an incremental collection has failed
  1884   GenCollectedHeap* gch = GenCollectedHeap::heap();
  1885   assert(gch->collector_policy()->is_two_generation_policy(),
  1886          "You may want to check the correctness of the following");
  1887   // Inform cms gen if this was due to partial collection failing.
  1888   // The CMS gen may use this fact to determine its expansion policy.
  1889   if (gch->incremental_collection_will_fail()) {
  1890     assert(!_cmsGen->incremental_collection_failed(),
  1891            "Should have been noticed, reacted to and cleared");
  1892     _cmsGen->set_incremental_collection_failed();
  1894   *should_compact =
  1895     UseCMSCompactAtFullCollection &&
  1896     ((_full_gcs_since_conc_gc >= CMSFullGCsBeforeCompaction) ||
  1897      GCCause::is_user_requested_gc(gch->gc_cause()) ||
  1898      gch->incremental_collection_will_fail());
  1899   *should_start_over = false;
  1900   if (clear_all_soft_refs && !*should_compact) {
  1901     // We are about to do a last ditch collection attempt
  1902     // so it would normally make sense to do a compaction
  1903     // to reclaim as much space as possible.
  1904     if (CMSCompactWhenClearAllSoftRefs) {
  1905       // Default: The rationale is that in this case either
  1906       // we are past the final marking phase, in which case
  1907       // we'd have to start over, or so little has been done
  1908       // that there's little point in saving that work. Compaction
  1909       // appears to be the sensible choice in either case.
  1910       *should_compact = true;
  1911     } else {
  1912       // We have been asked to clear all soft refs, but not to
  1913       // compact. Make sure that we aren't past the final checkpoint
  1914       // phase, for that is where we process soft refs. If we are already
  1915       // past that phase, we'll need to redo the refs discovery phase and
  1916       // if necessary clear soft refs that weren't previously
  1917       // cleared. We do so by remembering the phase in which
  1918       // we came in, and if we are past the refs processing
  1919       // phase, we'll choose to just redo the mark-sweep
  1920       // collection from scratch.
  1921       if (_collectorState > FinalMarking) {
  1922         // We are past the refs processing phase;
  1923         // start over and do a fresh synchronous CMS cycle
  1924         _collectorState = Resetting; // skip to reset to start new cycle
  1925         reset(false /* == !asynch */);
  1926         *should_start_over = true;
  1927       } // else we can continue a possibly ongoing current cycle
  1932 // A work method used by the foreground collector to do
  1933 // a mark-sweep-compact.
  1934 void CMSCollector::do_compaction_work(bool clear_all_soft_refs) {
  1935   GenCollectedHeap* gch = GenCollectedHeap::heap();
  1936   TraceTime t("CMS:MSC ", PrintGCDetails && Verbose, true, gclog_or_tty);
  1937   if (PrintGC && Verbose && !(GCCause::is_user_requested_gc(gch->gc_cause()))) {
  1938     gclog_or_tty->print_cr("Compact ConcurrentMarkSweepGeneration after %d "
  1939       "collections passed to foreground collector", _full_gcs_since_conc_gc);
  1942   // Sample collection interval time and reset for collection pause.
  1943   if (UseAdaptiveSizePolicy) {
  1944     size_policy()->msc_collection_begin();
  1947   // Temporarily widen the span of the weak reference processing to
  1948   // the entire heap.
  1949   MemRegion new_span(GenCollectedHeap::heap()->reserved_region());
  1950   ReferenceProcessorSpanMutator x(ref_processor(), new_span);
  1952   // Temporarily, clear the "is_alive_non_header" field of the
  1953   // reference processor.
  1954   ReferenceProcessorIsAliveMutator y(ref_processor(), NULL);
  1956   // Temporarily make reference _processing_ single threaded (non-MT).
  1957   ReferenceProcessorMTProcMutator z(ref_processor(), false);
  1959   // Temporarily make refs discovery atomic
  1960   ReferenceProcessorAtomicMutator w(ref_processor(), true);
  1962   ref_processor()->set_enqueuing_is_done(false);
  1963   ref_processor()->enable_discovery();
  1964   ref_processor()->snap_policy(clear_all_soft_refs);
  1965   // If an asynchronous collection finishes, the _modUnionTable is
  1966   // all clear.  If we are assuming the collection from an asynchronous
  1967   // collection, clear the _modUnionTable.
  1968   assert(_collectorState != Idling || _modUnionTable.isAllClear(),
  1969     "_modUnionTable should be clear if the baton was not passed");
  1970   _modUnionTable.clear_all();
  1972   // We must adjust the allocation statistics being maintained
  1973   // in the free list space. We do so by reading and clearing
  1974   // the sweep timer and updating the block flux rate estimates below.
  1975   assert(_sweep_timer.is_active(), "We should never see the timer inactive");
  1976   _sweep_timer.stop();
  1977   // Note that we do not use this sample to update the _sweep_estimate.
  1978   _cmsGen->cmsSpace()->beginSweepFLCensus((float)(_sweep_timer.seconds()),
  1979                                           _sweep_estimate.padded_average());
  1981   GenMarkSweep::invoke_at_safepoint(_cmsGen->level(),
  1982     ref_processor(), clear_all_soft_refs);
  1983   #ifdef ASSERT
  1984     CompactibleFreeListSpace* cms_space = _cmsGen->cmsSpace();
  1985     size_t free_size = cms_space->free();
  1986     assert(free_size ==
  1987            pointer_delta(cms_space->end(), cms_space->compaction_top())
  1988            * HeapWordSize,
  1989       "All the free space should be compacted into one chunk at top");
  1990     assert(cms_space->dictionary()->totalChunkSize(
  1991                                       debug_only(cms_space->freelistLock())) == 0 ||
  1992            cms_space->totalSizeInIndexedFreeLists() == 0,
  1993       "All the free space should be in a single chunk");
  1994     size_t num = cms_space->totalCount();
  1995     assert((free_size == 0 && num == 0) ||
  1996            (free_size > 0  && (num == 1 || num == 2)),
  1997          "There should be at most 2 free chunks after compaction");
  1998   #endif // ASSERT
  1999   _collectorState = Resetting;
  2000   assert(_restart_addr == NULL,
  2001          "Should have been NULL'd before baton was passed");
  2002   reset(false /* == !asynch */);
  2003   _cmsGen->reset_after_compaction();
  2004   _concurrent_cycles_since_last_unload = 0;
  2006   if (verifying() && !should_unload_classes()) {
  2007     perm_gen_verify_bit_map()->clear_all();
  2010   // Clear any data recorded in the PLAB chunk arrays.
  2011   if (_survivor_plab_array != NULL) {
  2012     reset_survivor_plab_arrays();
  2015   // Adjust the per-size allocation stats for the next epoch.
  2016   _cmsGen->cmsSpace()->endSweepFLCensus(sweepCount() /* fake */);
  2017   // Restart the "sweep timer" for next epoch.
  2018   _sweep_timer.reset();
  2019   _sweep_timer.start();
  2021   // Sample collection pause time and reset for collection interval.
  2022   if (UseAdaptiveSizePolicy) {
  2023     size_policy()->msc_collection_end(gch->gc_cause());
  2026   // For a mark-sweep-compact, compute_new_size() will be called
  2027   // in the heap's do_collection() method.
  2030 // A work method used by the foreground collector to do
  2031 // a mark-sweep, after taking over from a possibly on-going
  2032 // concurrent mark-sweep collection.
  2033 void CMSCollector::do_mark_sweep_work(bool clear_all_soft_refs,
  2034   CollectorState first_state, bool should_start_over) {
  2035   if (PrintGC && Verbose) {
  2036     gclog_or_tty->print_cr("Pass concurrent collection to foreground "
  2037       "collector with count %d",
  2038       _full_gcs_since_conc_gc);
  2040   switch (_collectorState) {
  2041     case Idling:
  2042       if (first_state == Idling || should_start_over) {
  2043         // The background GC was not active, or should
  2044         // restarted from scratch;  start the cycle.
  2045         _collectorState = InitialMarking;
  2047       // If first_state was not Idling, then a background GC
  2048       // was in progress and has now finished.  No need to do it
  2049       // again.  Leave the state as Idling.
  2050       break;
  2051     case Precleaning:
  2052       // In the foreground case don't do the precleaning since
  2053       // it is not done concurrently and there is extra work
  2054       // required.
  2055       _collectorState = FinalMarking;
  2057   if (PrintGCDetails &&
  2058       (_collectorState > Idling ||
  2059        !GCCause::is_user_requested_gc(GenCollectedHeap::heap()->gc_cause()))) {
  2060     gclog_or_tty->print(" (concurrent mode failure)");
  2062   collect_in_foreground(clear_all_soft_refs);
  2064   // For a mark-sweep, compute_new_size() will be called
  2065   // in the heap's do_collection() method.
  2069 void CMSCollector::getFreelistLocks() const {
  2070   // Get locks for all free lists in all generations that this
  2071   // collector is responsible for
  2072   _cmsGen->freelistLock()->lock_without_safepoint_check();
  2073   _permGen->freelistLock()->lock_without_safepoint_check();
  2076 void CMSCollector::releaseFreelistLocks() const {
  2077   // Release locks for all free lists in all generations that this
  2078   // collector is responsible for
  2079   _cmsGen->freelistLock()->unlock();
  2080   _permGen->freelistLock()->unlock();
  2083 bool CMSCollector::haveFreelistLocks() const {
  2084   // Check locks for all free lists in all generations that this
  2085   // collector is responsible for
  2086   assert_lock_strong(_cmsGen->freelistLock());
  2087   assert_lock_strong(_permGen->freelistLock());
  2088   PRODUCT_ONLY(ShouldNotReachHere());
  2089   return true;
  2092 // A utility class that is used by the CMS collector to
  2093 // temporarily "release" the foreground collector from its
  2094 // usual obligation to wait for the background collector to
  2095 // complete an ongoing phase before proceeding.
  2096 class ReleaseForegroundGC: public StackObj {
  2097  private:
  2098   CMSCollector* _c;
  2099  public:
  2100   ReleaseForegroundGC(CMSCollector* c) : _c(c) {
  2101     assert(_c->_foregroundGCShouldWait, "Else should not need to call");
  2102     MutexLockerEx x(CGC_lock, Mutex::_no_safepoint_check_flag);
  2103     // allow a potentially blocked foreground collector to proceed
  2104     _c->_foregroundGCShouldWait = false;
  2105     if (_c->_foregroundGCIsActive) {
  2106       CGC_lock->notify();
  2108     assert(!ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  2109            "Possible deadlock");
  2112   ~ReleaseForegroundGC() {
  2113     assert(!_c->_foregroundGCShouldWait, "Usage protocol violation?");
  2114     MutexLockerEx x(CGC_lock, Mutex::_no_safepoint_check_flag);
  2115     _c->_foregroundGCShouldWait = true;
  2117 };
  2119 // There are separate collect_in_background and collect_in_foreground because of
  2120 // the different locking requirements of the background collector and the
  2121 // foreground collector.  There was originally an attempt to share
  2122 // one "collect" method between the background collector and the foreground
  2123 // collector but the if-then-else required made it cleaner to have
  2124 // separate methods.
  2125 void CMSCollector::collect_in_background(bool clear_all_soft_refs) {
  2126   assert(Thread::current()->is_ConcurrentGC_thread(),
  2127     "A CMS asynchronous collection is only allowed on a CMS thread.");
  2129   GenCollectedHeap* gch = GenCollectedHeap::heap();
  2131     bool safepoint_check = Mutex::_no_safepoint_check_flag;
  2132     MutexLockerEx hl(Heap_lock, safepoint_check);
  2133     FreelistLocker fll(this);
  2134     MutexLockerEx x(CGC_lock, safepoint_check);
  2135     if (_foregroundGCIsActive || !UseAsyncConcMarkSweepGC) {
  2136       // The foreground collector is active or we're
  2137       // not using asynchronous collections.  Skip this
  2138       // background collection.
  2139       assert(!_foregroundGCShouldWait, "Should be clear");
  2140       return;
  2141     } else {
  2142       assert(_collectorState == Idling, "Should be idling before start.");
  2143       _collectorState = InitialMarking;
  2144       // Reset the expansion cause, now that we are about to begin
  2145       // a new cycle.
  2146       clear_expansion_cause();
  2148     // Decide if we want to enable class unloading as part of the
  2149     // ensuing concurrent GC cycle.
  2150     update_should_unload_classes();
  2151     _full_gc_requested = false;           // acks all outstanding full gc requests
  2152     // Signal that we are about to start a collection
  2153     gch->increment_total_full_collections();  // ... starting a collection cycle
  2154     _collection_count_start = gch->total_full_collections();
  2157   // Used for PrintGC
  2158   size_t prev_used;
  2159   if (PrintGC && Verbose) {
  2160     prev_used = _cmsGen->used(); // XXXPERM
  2163   // The change of the collection state is normally done at this level;
  2164   // the exceptions are phases that are executed while the world is
  2165   // stopped.  For those phases the change of state is done while the
  2166   // world is stopped.  For baton passing purposes this allows the
  2167   // background collector to finish the phase and change state atomically.
  2168   // The foreground collector cannot wait on a phase that is done
  2169   // while the world is stopped because the foreground collector already
  2170   // has the world stopped and would deadlock.
  2171   while (_collectorState != Idling) {
  2172     if (TraceCMSState) {
  2173       gclog_or_tty->print_cr("Thread " INTPTR_FORMAT " in CMS state %d",
  2174         Thread::current(), _collectorState);
  2176     // The foreground collector
  2177     //   holds the Heap_lock throughout its collection.
  2178     //   holds the CMS token (but not the lock)
  2179     //     except while it is waiting for the background collector to yield.
  2180     //
  2181     // The foreground collector should be blocked (not for long)
  2182     //   if the background collector is about to start a phase
  2183     //   executed with world stopped.  If the background
  2184     //   collector has already started such a phase, the
  2185     //   foreground collector is blocked waiting for the
  2186     //   Heap_lock.  The stop-world phases (InitialMarking and FinalMarking)
  2187     //   are executed in the VM thread.
  2188     //
  2189     // The locking order is
  2190     //   PendingListLock (PLL)  -- if applicable (FinalMarking)
  2191     //   Heap_lock  (both this & PLL locked in VM_CMS_Operation::prologue())
  2192     //   CMS token  (claimed in
  2193     //                stop_world_and_do() -->
  2194     //                  safepoint_synchronize() -->
  2195     //                    CMSThread::synchronize())
  2198       // Check if the FG collector wants us to yield.
  2199       CMSTokenSync x(true); // is cms thread
  2200       if (waitForForegroundGC()) {
  2201         // We yielded to a foreground GC, nothing more to be
  2202         // done this round.
  2203         assert(_foregroundGCShouldWait == false, "We set it to false in "
  2204                "waitForForegroundGC()");
  2205         if (TraceCMSState) {
  2206           gclog_or_tty->print_cr("CMS Thread " INTPTR_FORMAT
  2207             " exiting collection CMS state %d",
  2208             Thread::current(), _collectorState);
  2210         return;
  2211       } else {
  2212         // The background collector can run but check to see if the
  2213         // foreground collector has done a collection while the
  2214         // background collector was waiting to get the CGC_lock
  2215         // above.  If yes, break so that _foregroundGCShouldWait
  2216         // is cleared before returning.
  2217         if (_collectorState == Idling) {
  2218           break;
  2223     assert(_foregroundGCShouldWait, "Foreground collector, if active, "
  2224       "should be waiting");
  2226     switch (_collectorState) {
  2227       case InitialMarking:
  2229           ReleaseForegroundGC x(this);
  2230           stats().record_cms_begin();
  2232           VM_CMS_Initial_Mark initial_mark_op(this);
  2233           VMThread::execute(&initial_mark_op);
  2235         // The collector state may be any legal state at this point
  2236         // since the background collector may have yielded to the
  2237         // foreground collector.
  2238         break;
  2239       case Marking:
  2240         // initial marking in checkpointRootsInitialWork has been completed
  2241         if (markFromRoots(true)) { // we were successful
  2242           assert(_collectorState == Precleaning, "Collector state should "
  2243             "have changed");
  2244         } else {
  2245           assert(_foregroundGCIsActive, "Internal state inconsistency");
  2247         break;
  2248       case Precleaning:
  2249         if (UseAdaptiveSizePolicy) {
  2250           size_policy()->concurrent_precleaning_begin();
  2252         // marking from roots in markFromRoots has been completed
  2253         preclean();
  2254         if (UseAdaptiveSizePolicy) {
  2255           size_policy()->concurrent_precleaning_end();
  2257         assert(_collectorState == AbortablePreclean ||
  2258                _collectorState == FinalMarking,
  2259                "Collector state should have changed");
  2260         break;
  2261       case AbortablePreclean:
  2262         if (UseAdaptiveSizePolicy) {
  2263         size_policy()->concurrent_phases_resume();
  2265         abortable_preclean();
  2266         if (UseAdaptiveSizePolicy) {
  2267           size_policy()->concurrent_precleaning_end();
  2269         assert(_collectorState == FinalMarking, "Collector state should "
  2270           "have changed");
  2271         break;
  2272       case FinalMarking:
  2274           ReleaseForegroundGC x(this);
  2276           VM_CMS_Final_Remark final_remark_op(this);
  2277           VMThread::execute(&final_remark_op);
  2279         assert(_foregroundGCShouldWait, "block post-condition");
  2280         break;
  2281       case Sweeping:
  2282         if (UseAdaptiveSizePolicy) {
  2283           size_policy()->concurrent_sweeping_begin();
  2285         // final marking in checkpointRootsFinal has been completed
  2286         sweep(true);
  2287         assert(_collectorState == Resizing, "Collector state change "
  2288           "to Resizing must be done under the free_list_lock");
  2289         _full_gcs_since_conc_gc = 0;
  2291         // Stop the timers for adaptive size policy for the concurrent phases
  2292         if (UseAdaptiveSizePolicy) {
  2293           size_policy()->concurrent_sweeping_end();
  2294           size_policy()->concurrent_phases_end(gch->gc_cause(),
  2295                                              gch->prev_gen(_cmsGen)->capacity(),
  2296                                              _cmsGen->free());
  2299       case Resizing: {
  2300         // Sweeping has been completed...
  2301         // At this point the background collection has completed.
  2302         // Don't move the call to compute_new_size() down
  2303         // into code that might be executed if the background
  2304         // collection was preempted.
  2306           ReleaseForegroundGC x(this);   // unblock FG collection
  2307           MutexLockerEx       y(Heap_lock, Mutex::_no_safepoint_check_flag);
  2308           CMSTokenSync        z(true);   // not strictly needed.
  2309           if (_collectorState == Resizing) {
  2310             compute_new_size();
  2311             _collectorState = Resetting;
  2312           } else {
  2313             assert(_collectorState == Idling, "The state should only change"
  2314                    " because the foreground collector has finished the collection");
  2317         break;
  2319       case Resetting:
  2320         // CMS heap resizing has been completed
  2321         reset(true);
  2322         assert(_collectorState == Idling, "Collector state should "
  2323           "have changed");
  2324         stats().record_cms_end();
  2325         // Don't move the concurrent_phases_end() and compute_new_size()
  2326         // calls to here because a preempted background collection
  2327         // has it's state set to "Resetting".
  2328         break;
  2329       case Idling:
  2330       default:
  2331         ShouldNotReachHere();
  2332         break;
  2334     if (TraceCMSState) {
  2335       gclog_or_tty->print_cr("  Thread " INTPTR_FORMAT " done - next CMS state %d",
  2336         Thread::current(), _collectorState);
  2338     assert(_foregroundGCShouldWait, "block post-condition");
  2341   // Should this be in gc_epilogue?
  2342   collector_policy()->counters()->update_counters();
  2345     // Clear _foregroundGCShouldWait and, in the event that the
  2346     // foreground collector is waiting, notify it, before
  2347     // returning.
  2348     MutexLockerEx x(CGC_lock, Mutex::_no_safepoint_check_flag);
  2349     _foregroundGCShouldWait = false;
  2350     if (_foregroundGCIsActive) {
  2351       CGC_lock->notify();
  2353     assert(!ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  2354            "Possible deadlock");
  2356   if (TraceCMSState) {
  2357     gclog_or_tty->print_cr("CMS Thread " INTPTR_FORMAT
  2358       " exiting collection CMS state %d",
  2359       Thread::current(), _collectorState);
  2361   if (PrintGC && Verbose) {
  2362     _cmsGen->print_heap_change(prev_used);
  2366 void CMSCollector::collect_in_foreground(bool clear_all_soft_refs) {
  2367   assert(_foregroundGCIsActive && !_foregroundGCShouldWait,
  2368          "Foreground collector should be waiting, not executing");
  2369   assert(Thread::current()->is_VM_thread(), "A foreground collection"
  2370     "may only be done by the VM Thread with the world stopped");
  2371   assert(ConcurrentMarkSweepThread::vm_thread_has_cms_token(),
  2372          "VM thread should have CMS token");
  2374   NOT_PRODUCT(TraceTime t("CMS:MS (foreground) ", PrintGCDetails && Verbose,
  2375     true, gclog_or_tty);)
  2376   if (UseAdaptiveSizePolicy) {
  2377     size_policy()->ms_collection_begin();
  2379   COMPILER2_PRESENT(DerivedPointerTableDeactivate dpt_deact);
  2381   HandleMark hm;  // Discard invalid handles created during verification
  2383   if (VerifyBeforeGC &&
  2384       GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) {
  2385     Universe::verify(true);
  2388   // Snapshot the soft reference policy to be used in this collection cycle.
  2389   ref_processor()->snap_policy(clear_all_soft_refs);
  2391   bool init_mark_was_synchronous = false; // until proven otherwise
  2392   while (_collectorState != Idling) {
  2393     if (TraceCMSState) {
  2394       gclog_or_tty->print_cr("Thread " INTPTR_FORMAT " in CMS state %d",
  2395         Thread::current(), _collectorState);
  2397     switch (_collectorState) {
  2398       case InitialMarking:
  2399         init_mark_was_synchronous = true;  // fact to be exploited in re-mark
  2400         checkpointRootsInitial(false);
  2401         assert(_collectorState == Marking, "Collector state should have changed"
  2402           " within checkpointRootsInitial()");
  2403         break;
  2404       case Marking:
  2405         // initial marking in checkpointRootsInitialWork has been completed
  2406         if (VerifyDuringGC &&
  2407             GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) {
  2408           gclog_or_tty->print("Verify before initial mark: ");
  2409           Universe::verify(true);
  2412           bool res = markFromRoots(false);
  2413           assert(res && _collectorState == FinalMarking, "Collector state should "
  2414             "have changed");
  2415           break;
  2417       case FinalMarking:
  2418         if (VerifyDuringGC &&
  2419             GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) {
  2420           gclog_or_tty->print("Verify before re-mark: ");
  2421           Universe::verify(true);
  2423         checkpointRootsFinal(false, clear_all_soft_refs,
  2424                              init_mark_was_synchronous);
  2425         assert(_collectorState == Sweeping, "Collector state should not "
  2426           "have changed within checkpointRootsFinal()");
  2427         break;
  2428       case Sweeping:
  2429         // final marking in checkpointRootsFinal has been completed
  2430         if (VerifyDuringGC &&
  2431             GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) {
  2432           gclog_or_tty->print("Verify before sweep: ");
  2433           Universe::verify(true);
  2435         sweep(false);
  2436         assert(_collectorState == Resizing, "Incorrect state");
  2437         break;
  2438       case Resizing: {
  2439         // Sweeping has been completed; the actual resize in this case
  2440         // is done separately; nothing to be done in this state.
  2441         _collectorState = Resetting;
  2442         break;
  2444       case Resetting:
  2445         // The heap has been resized.
  2446         if (VerifyDuringGC &&
  2447             GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) {
  2448           gclog_or_tty->print("Verify before reset: ");
  2449           Universe::verify(true);
  2451         reset(false);
  2452         assert(_collectorState == Idling, "Collector state should "
  2453           "have changed");
  2454         break;
  2455       case Precleaning:
  2456       case AbortablePreclean:
  2457         // Elide the preclean phase
  2458         _collectorState = FinalMarking;
  2459         break;
  2460       default:
  2461         ShouldNotReachHere();
  2463     if (TraceCMSState) {
  2464       gclog_or_tty->print_cr("  Thread " INTPTR_FORMAT " done - next CMS state %d",
  2465         Thread::current(), _collectorState);
  2469   if (UseAdaptiveSizePolicy) {
  2470     GenCollectedHeap* gch = GenCollectedHeap::heap();
  2471     size_policy()->ms_collection_end(gch->gc_cause());
  2474   if (VerifyAfterGC &&
  2475       GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) {
  2476     Universe::verify(true);
  2478   if (TraceCMSState) {
  2479     gclog_or_tty->print_cr("CMS Thread " INTPTR_FORMAT
  2480       " exiting collection CMS state %d",
  2481       Thread::current(), _collectorState);
  2485 bool CMSCollector::waitForForegroundGC() {
  2486   bool res = false;
  2487   assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  2488          "CMS thread should have CMS token");
  2489   // Block the foreground collector until the
  2490   // background collectors decides whether to
  2491   // yield.
  2492   MutexLockerEx x(CGC_lock, Mutex::_no_safepoint_check_flag);
  2493   _foregroundGCShouldWait = true;
  2494   if (_foregroundGCIsActive) {
  2495     // The background collector yields to the
  2496     // foreground collector and returns a value
  2497     // indicating that it has yielded.  The foreground
  2498     // collector can proceed.
  2499     res = true;
  2500     _foregroundGCShouldWait = false;
  2501     ConcurrentMarkSweepThread::clear_CMS_flag(
  2502       ConcurrentMarkSweepThread::CMS_cms_has_token);
  2503     ConcurrentMarkSweepThread::set_CMS_flag(
  2504       ConcurrentMarkSweepThread::CMS_cms_wants_token);
  2505     // Get a possibly blocked foreground thread going
  2506     CGC_lock->notify();
  2507     if (TraceCMSState) {
  2508       gclog_or_tty->print_cr("CMS Thread " INTPTR_FORMAT " waiting at CMS state %d",
  2509         Thread::current(), _collectorState);
  2511     while (_foregroundGCIsActive) {
  2512       CGC_lock->wait(Mutex::_no_safepoint_check_flag);
  2514     ConcurrentMarkSweepThread::set_CMS_flag(
  2515       ConcurrentMarkSweepThread::CMS_cms_has_token);
  2516     ConcurrentMarkSweepThread::clear_CMS_flag(
  2517       ConcurrentMarkSweepThread::CMS_cms_wants_token);
  2519   if (TraceCMSState) {
  2520     gclog_or_tty->print_cr("CMS Thread " INTPTR_FORMAT " continuing at CMS state %d",
  2521       Thread::current(), _collectorState);
  2523   return res;
  2526 // Because of the need to lock the free lists and other structures in
  2527 // the collector, common to all the generations that the collector is
  2528 // collecting, we need the gc_prologues of individual CMS generations
  2529 // delegate to their collector. It may have been simpler had the
  2530 // current infrastructure allowed one to call a prologue on a
  2531 // collector. In the absence of that we have the generation's
  2532 // prologue delegate to the collector, which delegates back
  2533 // some "local" work to a worker method in the individual generations
  2534 // that it's responsible for collecting, while itself doing any
  2535 // work common to all generations it's responsible for. A similar
  2536 // comment applies to the  gc_epilogue()'s.
  2537 // The role of the varaible _between_prologue_and_epilogue is to
  2538 // enforce the invocation protocol.
  2539 void CMSCollector::gc_prologue(bool full) {
  2540   // Call gc_prologue_work() for each CMSGen and PermGen that
  2541   // we are responsible for.
  2543   // The following locking discipline assumes that we are only called
  2544   // when the world is stopped.
  2545   assert(SafepointSynchronize::is_at_safepoint(), "world is stopped assumption");
  2547   // The CMSCollector prologue must call the gc_prologues for the
  2548   // "generations" (including PermGen if any) that it's responsible
  2549   // for.
  2551   assert(   Thread::current()->is_VM_thread()
  2552          || (   CMSScavengeBeforeRemark
  2553              && Thread::current()->is_ConcurrentGC_thread()),
  2554          "Incorrect thread type for prologue execution");
  2556   if (_between_prologue_and_epilogue) {
  2557     // We have already been invoked; this is a gc_prologue delegation
  2558     // from yet another CMS generation that we are responsible for, just
  2559     // ignore it since all relevant work has already been done.
  2560     return;
  2563   // set a bit saying prologue has been called; cleared in epilogue
  2564   _between_prologue_and_epilogue = true;
  2565   // Claim locks for common data structures, then call gc_prologue_work()
  2566   // for each CMSGen and PermGen that we are responsible for.
  2568   getFreelistLocks();   // gets free list locks on constituent spaces
  2569   bitMapLock()->lock_without_safepoint_check();
  2571   // Should call gc_prologue_work() for all cms gens we are responsible for
  2572   bool registerClosure =    _collectorState >= Marking
  2573                          && _collectorState < Sweeping;
  2574   ModUnionClosure* muc = ParallelGCThreads > 0 ? &_modUnionClosurePar
  2575                                                : &_modUnionClosure;
  2576   _cmsGen->gc_prologue_work(full, registerClosure, muc);
  2577   _permGen->gc_prologue_work(full, registerClosure, muc);
  2579   if (!full) {
  2580     stats().record_gc0_begin();
  2584 void ConcurrentMarkSweepGeneration::gc_prologue(bool full) {
  2585   // Delegate to CMScollector which knows how to coordinate between
  2586   // this and any other CMS generations that it is responsible for
  2587   // collecting.
  2588   collector()->gc_prologue(full);
  2591 // This is a "private" interface for use by this generation's CMSCollector.
  2592 // Not to be called directly by any other entity (for instance,
  2593 // GenCollectedHeap, which calls the "public" gc_prologue method above).
  2594 void ConcurrentMarkSweepGeneration::gc_prologue_work(bool full,
  2595   bool registerClosure, ModUnionClosure* modUnionClosure) {
  2596   assert(!incremental_collection_failed(), "Shouldn't be set yet");
  2597   assert(cmsSpace()->preconsumptionDirtyCardClosure() == NULL,
  2598     "Should be NULL");
  2599   if (registerClosure) {
  2600     cmsSpace()->setPreconsumptionDirtyCardClosure(modUnionClosure);
  2602   cmsSpace()->gc_prologue();
  2603   // Clear stat counters
  2604   NOT_PRODUCT(
  2605     assert(_numObjectsPromoted == 0, "check");
  2606     assert(_numWordsPromoted   == 0, "check");
  2607     if (Verbose && PrintGC) {
  2608       gclog_or_tty->print("Allocated "SIZE_FORMAT" objects, "
  2609                           SIZE_FORMAT" bytes concurrently",
  2610       _numObjectsAllocated, _numWordsAllocated*sizeof(HeapWord));
  2612     _numObjectsAllocated = 0;
  2613     _numWordsAllocated   = 0;
  2617 void CMSCollector::gc_epilogue(bool full) {
  2618   // The following locking discipline assumes that we are only called
  2619   // when the world is stopped.
  2620   assert(SafepointSynchronize::is_at_safepoint(),
  2621          "world is stopped assumption");
  2623   // Currently the CMS epilogue (see CompactibleFreeListSpace) merely checks
  2624   // if linear allocation blocks need to be appropriately marked to allow the
  2625   // the blocks to be parsable. We also check here whether we need to nudge the
  2626   // CMS collector thread to start a new cycle (if it's not already active).
  2627   assert(   Thread::current()->is_VM_thread()
  2628          || (   CMSScavengeBeforeRemark
  2629              && Thread::current()->is_ConcurrentGC_thread()),
  2630          "Incorrect thread type for epilogue execution");
  2632   if (!_between_prologue_and_epilogue) {
  2633     // We have already been invoked; this is a gc_epilogue delegation
  2634     // from yet another CMS generation that we are responsible for, just
  2635     // ignore it since all relevant work has already been done.
  2636     return;
  2638   assert(haveFreelistLocks(), "must have freelist locks");
  2639   assert_lock_strong(bitMapLock());
  2641   _cmsGen->gc_epilogue_work(full);
  2642   _permGen->gc_epilogue_work(full);
  2644   if (_collectorState == AbortablePreclean || _collectorState == Precleaning) {
  2645     // in case sampling was not already enabled, enable it
  2646     _start_sampling = true;
  2648   // reset _eden_chunk_array so sampling starts afresh
  2649   _eden_chunk_index = 0;
  2651   size_t cms_used   = _cmsGen->cmsSpace()->used();
  2652   size_t perm_used  = _permGen->cmsSpace()->used();
  2654   // update performance counters - this uses a special version of
  2655   // update_counters() that allows the utilization to be passed as a
  2656   // parameter, avoiding multiple calls to used().
  2657   //
  2658   _cmsGen->update_counters(cms_used);
  2659   _permGen->update_counters(perm_used);
  2661   if (CMSIncrementalMode) {
  2662     icms_update_allocation_limits();
  2665   bitMapLock()->unlock();
  2666   releaseFreelistLocks();
  2668   _between_prologue_and_epilogue = false;  // ready for next cycle
  2671 void ConcurrentMarkSweepGeneration::gc_epilogue(bool full) {
  2672   collector()->gc_epilogue(full);
  2674   // Also reset promotion tracking in par gc thread states.
  2675   if (ParallelGCThreads > 0) {
  2676     for (uint i = 0; i < ParallelGCThreads; i++) {
  2677       _par_gc_thread_states[i]->promo.stopTrackingPromotions();
  2682 void ConcurrentMarkSweepGeneration::gc_epilogue_work(bool full) {
  2683   assert(!incremental_collection_failed(), "Should have been cleared");
  2684   cmsSpace()->setPreconsumptionDirtyCardClosure(NULL);
  2685   cmsSpace()->gc_epilogue();
  2686     // Print stat counters
  2687   NOT_PRODUCT(
  2688     assert(_numObjectsAllocated == 0, "check");
  2689     assert(_numWordsAllocated == 0, "check");
  2690     if (Verbose && PrintGC) {
  2691       gclog_or_tty->print("Promoted "SIZE_FORMAT" objects, "
  2692                           SIZE_FORMAT" bytes",
  2693                  _numObjectsPromoted, _numWordsPromoted*sizeof(HeapWord));
  2695     _numObjectsPromoted = 0;
  2696     _numWordsPromoted   = 0;
  2699   if (PrintGC && Verbose) {
  2700     // Call down the chain in contiguous_available needs the freelistLock
  2701     // so print this out before releasing the freeListLock.
  2702     gclog_or_tty->print(" Contiguous available "SIZE_FORMAT" bytes ",
  2703                         contiguous_available());
  2707 #ifndef PRODUCT
  2708 bool CMSCollector::have_cms_token() {
  2709   Thread* thr = Thread::current();
  2710   if (thr->is_VM_thread()) {
  2711     return ConcurrentMarkSweepThread::vm_thread_has_cms_token();
  2712   } else if (thr->is_ConcurrentGC_thread()) {
  2713     return ConcurrentMarkSweepThread::cms_thread_has_cms_token();
  2714   } else if (thr->is_GC_task_thread()) {
  2715     return ConcurrentMarkSweepThread::vm_thread_has_cms_token() &&
  2716            ParGCRareEvent_lock->owned_by_self();
  2718   return false;
  2720 #endif
  2722 // Check reachability of the given heap address in CMS generation,
  2723 // treating all other generations as roots.
  2724 bool CMSCollector::is_cms_reachable(HeapWord* addr) {
  2725   // We could "guarantee" below, rather than assert, but i'll
  2726   // leave these as "asserts" so that an adventurous debugger
  2727   // could try this in the product build provided some subset of
  2728   // the conditions were met, provided they were intersted in the
  2729   // results and knew that the computation below wouldn't interfere
  2730   // with other concurrent computations mutating the structures
  2731   // being read or written.
  2732   assert(SafepointSynchronize::is_at_safepoint(),
  2733          "Else mutations in object graph will make answer suspect");
  2734   assert(have_cms_token(), "Should hold cms token");
  2735   assert(haveFreelistLocks(), "must hold free list locks");
  2736   assert_lock_strong(bitMapLock());
  2738   // Clear the marking bit map array before starting, but, just
  2739   // for kicks, first report if the given address is already marked
  2740   gclog_or_tty->print_cr("Start: Address 0x%x is%s marked", addr,
  2741                 _markBitMap.isMarked(addr) ? "" : " not");
  2743   if (verify_after_remark()) {
  2744     MutexLockerEx x(verification_mark_bm()->lock(), Mutex::_no_safepoint_check_flag);
  2745     bool result = verification_mark_bm()->isMarked(addr);
  2746     gclog_or_tty->print_cr("TransitiveMark: Address 0x%x %s marked", addr,
  2747                            result ? "IS" : "is NOT");
  2748     return result;
  2749   } else {
  2750     gclog_or_tty->print_cr("Could not compute result");
  2751     return false;
  2755 ////////////////////////////////////////////////////////
  2756 // CMS Verification Support
  2757 ////////////////////////////////////////////////////////
  2758 // Following the remark phase, the following invariant
  2759 // should hold -- each object in the CMS heap which is
  2760 // marked in markBitMap() should be marked in the verification_mark_bm().
  2762 class VerifyMarkedClosure: public BitMapClosure {
  2763   CMSBitMap* _marks;
  2764   bool       _failed;
  2766  public:
  2767   VerifyMarkedClosure(CMSBitMap* bm): _marks(bm), _failed(false) {}
  2769   bool do_bit(size_t offset) {
  2770     HeapWord* addr = _marks->offsetToHeapWord(offset);
  2771     if (!_marks->isMarked(addr)) {
  2772       oop(addr)->print();
  2773       gclog_or_tty->print_cr(" ("INTPTR_FORMAT" should have been marked)", addr);
  2774       _failed = true;
  2776     return true;
  2779   bool failed() { return _failed; }
  2780 };
  2782 bool CMSCollector::verify_after_remark() {
  2783   gclog_or_tty->print(" [Verifying CMS Marking... ");
  2784   MutexLockerEx ml(verification_mark_bm()->lock(), Mutex::_no_safepoint_check_flag);
  2785   static bool init = false;
  2787   assert(SafepointSynchronize::is_at_safepoint(),
  2788          "Else mutations in object graph will make answer suspect");
  2789   assert(have_cms_token(),
  2790          "Else there may be mutual interference in use of "
  2791          " verification data structures");
  2792   assert(_collectorState > Marking && _collectorState <= Sweeping,
  2793          "Else marking info checked here may be obsolete");
  2794   assert(haveFreelistLocks(), "must hold free list locks");
  2795   assert_lock_strong(bitMapLock());
  2798   // Allocate marking bit map if not already allocated
  2799   if (!init) { // first time
  2800     if (!verification_mark_bm()->allocate(_span)) {
  2801       return false;
  2803     init = true;
  2806   assert(verification_mark_stack()->isEmpty(), "Should be empty");
  2808   // Turn off refs discovery -- so we will be tracing through refs.
  2809   // This is as intended, because by this time
  2810   // GC must already have cleared any refs that need to be cleared,
  2811   // and traced those that need to be marked; moreover,
  2812   // the marking done here is not going to intefere in any
  2813   // way with the marking information used by GC.
  2814   NoRefDiscovery no_discovery(ref_processor());
  2816   COMPILER2_PRESENT(DerivedPointerTableDeactivate dpt_deact;)
  2818   // Clear any marks from a previous round
  2819   verification_mark_bm()->clear_all();
  2820   assert(verification_mark_stack()->isEmpty(), "markStack should be empty");
  2821   assert(overflow_list_is_empty(), "overflow list should be empty");
  2823   GenCollectedHeap* gch = GenCollectedHeap::heap();
  2824   gch->ensure_parsability(false);  // fill TLABs, but no need to retire them
  2825   // Update the saved marks which may affect the root scans.
  2826   gch->save_marks();
  2828   if (CMSRemarkVerifyVariant == 1) {
  2829     // In this first variant of verification, we complete
  2830     // all marking, then check if the new marks-verctor is
  2831     // a subset of the CMS marks-vector.
  2832     verify_after_remark_work_1();
  2833   } else if (CMSRemarkVerifyVariant == 2) {
  2834     // In this second variant of verification, we flag an error
  2835     // (i.e. an object reachable in the new marks-vector not reachable
  2836     // in the CMS marks-vector) immediately, also indicating the
  2837     // identify of an object (A) that references the unmarked object (B) --
  2838     // presumably, a mutation to A failed to be picked up by preclean/remark?
  2839     verify_after_remark_work_2();
  2840   } else {
  2841     warning("Unrecognized value %d for CMSRemarkVerifyVariant",
  2842             CMSRemarkVerifyVariant);
  2844   gclog_or_tty->print(" done] ");
  2845   return true;
  2848 void CMSCollector::verify_after_remark_work_1() {
  2849   ResourceMark rm;
  2850   HandleMark  hm;
  2851   GenCollectedHeap* gch = GenCollectedHeap::heap();
  2853   // Mark from roots one level into CMS
  2854   MarkRefsIntoClosure notOlder(_span, verification_mark_bm(), true /* nmethods */);
  2855   gch->rem_set()->prepare_for_younger_refs_iterate(false); // Not parallel.
  2857   gch->gen_process_strong_roots(_cmsGen->level(),
  2858                                 true,   // younger gens are roots
  2859                                 true,   // collecting perm gen
  2860                                 SharedHeap::ScanningOption(roots_scanning_options()),
  2861                                 NULL, &notOlder);
  2863   // Now mark from the roots
  2864   assert(_revisitStack.isEmpty(), "Should be empty");
  2865   MarkFromRootsClosure markFromRootsClosure(this, _span,
  2866     verification_mark_bm(), verification_mark_stack(), &_revisitStack,
  2867     false /* don't yield */, true /* verifying */);
  2868   assert(_restart_addr == NULL, "Expected pre-condition");
  2869   verification_mark_bm()->iterate(&markFromRootsClosure);
  2870   while (_restart_addr != NULL) {
  2871     // Deal with stack overflow: by restarting at the indicated
  2872     // address.
  2873     HeapWord* ra = _restart_addr;
  2874     markFromRootsClosure.reset(ra);
  2875     _restart_addr = NULL;
  2876     verification_mark_bm()->iterate(&markFromRootsClosure, ra, _span.end());
  2878   assert(verification_mark_stack()->isEmpty(), "Should have been drained");
  2879   verify_work_stacks_empty();
  2880   // Should reset the revisit stack above, since no class tree
  2881   // surgery is forthcoming.
  2882   _revisitStack.reset(); // throwing away all contents
  2884   // Marking completed -- now verify that each bit marked in
  2885   // verification_mark_bm() is also marked in markBitMap(); flag all
  2886   // errors by printing corresponding objects.
  2887   VerifyMarkedClosure vcl(markBitMap());
  2888   verification_mark_bm()->iterate(&vcl);
  2889   if (vcl.failed()) {
  2890     gclog_or_tty->print("Verification failed");
  2891     Universe::heap()->print();
  2892     fatal(" ... aborting");
  2896 void CMSCollector::verify_after_remark_work_2() {
  2897   ResourceMark rm;
  2898   HandleMark  hm;
  2899   GenCollectedHeap* gch = GenCollectedHeap::heap();
  2901   // Mark from roots one level into CMS
  2902   MarkRefsIntoVerifyClosure notOlder(_span, verification_mark_bm(),
  2903                                      markBitMap(), true /* nmethods */);
  2904   gch->rem_set()->prepare_for_younger_refs_iterate(false); // Not parallel.
  2905   gch->gen_process_strong_roots(_cmsGen->level(),
  2906                                 true,   // younger gens are roots
  2907                                 true,   // collecting perm gen
  2908                                 SharedHeap::ScanningOption(roots_scanning_options()),
  2909                                 NULL, &notOlder);
  2911   // Now mark from the roots
  2912   assert(_revisitStack.isEmpty(), "Should be empty");
  2913   MarkFromRootsVerifyClosure markFromRootsClosure(this, _span,
  2914     verification_mark_bm(), markBitMap(), verification_mark_stack());
  2915   assert(_restart_addr == NULL, "Expected pre-condition");
  2916   verification_mark_bm()->iterate(&markFromRootsClosure);
  2917   while (_restart_addr != NULL) {
  2918     // Deal with stack overflow: by restarting at the indicated
  2919     // address.
  2920     HeapWord* ra = _restart_addr;
  2921     markFromRootsClosure.reset(ra);
  2922     _restart_addr = NULL;
  2923     verification_mark_bm()->iterate(&markFromRootsClosure, ra, _span.end());
  2925   assert(verification_mark_stack()->isEmpty(), "Should have been drained");
  2926   verify_work_stacks_empty();
  2927   // Should reset the revisit stack above, since no class tree
  2928   // surgery is forthcoming.
  2929   _revisitStack.reset(); // throwing away all contents
  2931   // Marking completed -- now verify that each bit marked in
  2932   // verification_mark_bm() is also marked in markBitMap(); flag all
  2933   // errors by printing corresponding objects.
  2934   VerifyMarkedClosure vcl(markBitMap());
  2935   verification_mark_bm()->iterate(&vcl);
  2936   assert(!vcl.failed(), "Else verification above should not have succeeded");
  2939 void ConcurrentMarkSweepGeneration::save_marks() {
  2940   // delegate to CMS space
  2941   cmsSpace()->save_marks();
  2942   for (uint i = 0; i < ParallelGCThreads; i++) {
  2943     _par_gc_thread_states[i]->promo.startTrackingPromotions();
  2947 bool ConcurrentMarkSweepGeneration::no_allocs_since_save_marks() {
  2948   return cmsSpace()->no_allocs_since_save_marks();
  2951 #define CMS_SINCE_SAVE_MARKS_DEFN(OopClosureType, nv_suffix)    \
  2953 void ConcurrentMarkSweepGeneration::                            \
  2954 oop_since_save_marks_iterate##nv_suffix(OopClosureType* cl) {   \
  2955   cl->set_generation(this);                                     \
  2956   cmsSpace()->oop_since_save_marks_iterate##nv_suffix(cl);      \
  2957   cl->reset_generation();                                       \
  2958   save_marks();                                                 \
  2961 ALL_SINCE_SAVE_MARKS_CLOSURES(CMS_SINCE_SAVE_MARKS_DEFN)
  2963 void
  2964 ConcurrentMarkSweepGeneration::object_iterate_since_last_GC(ObjectClosure* blk)
  2966   // Not currently implemented; need to do the following. -- ysr.
  2967   // dld -- I think that is used for some sort of allocation profiler.  So it
  2968   // really means the objects allocated by the mutator since the last
  2969   // GC.  We could potentially implement this cheaply by recording only
  2970   // the direct allocations in a side data structure.
  2971   //
  2972   // I think we probably ought not to be required to support these
  2973   // iterations at any arbitrary point; I think there ought to be some
  2974   // call to enable/disable allocation profiling in a generation/space,
  2975   // and the iterator ought to return the objects allocated in the
  2976   // gen/space since the enable call, or the last iterator call (which
  2977   // will probably be at a GC.)  That way, for gens like CM&S that would
  2978   // require some extra data structure to support this, we only pay the
  2979   // cost when it's in use...
  2980   cmsSpace()->object_iterate_since_last_GC(blk);
  2983 void
  2984 ConcurrentMarkSweepGeneration::younger_refs_iterate(OopsInGenClosure* cl) {
  2985   cl->set_generation(this);
  2986   younger_refs_in_space_iterate(_cmsSpace, cl);
  2987   cl->reset_generation();
  2990 void
  2991 ConcurrentMarkSweepGeneration::oop_iterate(MemRegion mr, OopClosure* cl) {
  2992   if (freelistLock()->owned_by_self()) {
  2993     Generation::oop_iterate(mr, cl);
  2994   } else {
  2995     MutexLockerEx x(freelistLock(), Mutex::_no_safepoint_check_flag);
  2996     Generation::oop_iterate(mr, cl);
  3000 void
  3001 ConcurrentMarkSweepGeneration::oop_iterate(OopClosure* cl) {
  3002   if (freelistLock()->owned_by_self()) {
  3003     Generation::oop_iterate(cl);
  3004   } else {
  3005     MutexLockerEx x(freelistLock(), Mutex::_no_safepoint_check_flag);
  3006     Generation::oop_iterate(cl);
  3010 void
  3011 ConcurrentMarkSweepGeneration::object_iterate(ObjectClosure* cl) {
  3012   if (freelistLock()->owned_by_self()) {
  3013     Generation::object_iterate(cl);
  3014   } else {
  3015     MutexLockerEx x(freelistLock(), Mutex::_no_safepoint_check_flag);
  3016     Generation::object_iterate(cl);
  3020 void
  3021 ConcurrentMarkSweepGeneration::pre_adjust_pointers() {
  3024 void
  3025 ConcurrentMarkSweepGeneration::post_compact() {
  3028 void
  3029 ConcurrentMarkSweepGeneration::prepare_for_verify() {
  3030   // Fix the linear allocation blocks to look like free blocks.
  3032   // Locks are normally acquired/released in gc_prologue/gc_epilogue, but those
  3033   // are not called when the heap is verified during universe initialization and
  3034   // at vm shutdown.
  3035   if (freelistLock()->owned_by_self()) {
  3036     cmsSpace()->prepare_for_verify();
  3037   } else {
  3038     MutexLockerEx fll(freelistLock(), Mutex::_no_safepoint_check_flag);
  3039     cmsSpace()->prepare_for_verify();
  3043 void
  3044 ConcurrentMarkSweepGeneration::verify(bool allow_dirty /* ignored */) {
  3045   // Locks are normally acquired/released in gc_prologue/gc_epilogue, but those
  3046   // are not called when the heap is verified during universe initialization and
  3047   // at vm shutdown.
  3048   if (freelistLock()->owned_by_self()) {
  3049     cmsSpace()->verify(false /* ignored */);
  3050   } else {
  3051     MutexLockerEx fll(freelistLock(), Mutex::_no_safepoint_check_flag);
  3052     cmsSpace()->verify(false /* ignored */);
  3056 void CMSCollector::verify(bool allow_dirty /* ignored */) {
  3057   _cmsGen->verify(allow_dirty);
  3058   _permGen->verify(allow_dirty);
  3061 #ifndef PRODUCT
  3062 bool CMSCollector::overflow_list_is_empty() const {
  3063   assert(_num_par_pushes >= 0, "Inconsistency");
  3064   if (_overflow_list == NULL) {
  3065     assert(_num_par_pushes == 0, "Inconsistency");
  3067   return _overflow_list == NULL;
  3070 // The methods verify_work_stacks_empty() and verify_overflow_empty()
  3071 // merely consolidate assertion checks that appear to occur together frequently.
  3072 void CMSCollector::verify_work_stacks_empty() const {
  3073   assert(_markStack.isEmpty(), "Marking stack should be empty");
  3074   assert(overflow_list_is_empty(), "Overflow list should be empty");
  3077 void CMSCollector::verify_overflow_empty() const {
  3078   assert(overflow_list_is_empty(), "Overflow list should be empty");
  3079   assert(no_preserved_marks(), "No preserved marks");
  3081 #endif // PRODUCT
  3083 // Decide if we want to enable class unloading as part of the
  3084 // ensuing concurrent GC cycle. We will collect the perm gen and
  3085 // unload classes if it's the case that:
  3086 // (1) an explicit gc request has been made and the flag
  3087 //     ExplicitGCInvokesConcurrentAndUnloadsClasses is set, OR
  3088 // (2) (a) class unloading is enabled at the command line, and
  3089 //     (b) (i)   perm gen threshold has been crossed, or
  3090 //         (ii)  old gen is getting really full, or
  3091 //         (iii) the previous N CMS collections did not collect the
  3092 //               perm gen
  3093 // NOTE: Provided there is no change in the state of the heap between
  3094 // calls to this method, it should have idempotent results. Moreover,
  3095 // its results should be monotonically increasing (i.e. going from 0 to 1,
  3096 // but not 1 to 0) between successive calls between which the heap was
  3097 // not collected. For the implementation below, it must thus rely on
  3098 // the property that concurrent_cycles_since_last_unload()
  3099 // will not decrease unless a collection cycle happened and that
  3100 // _permGen->should_concurrent_collect() and _cmsGen->is_too_full() are
  3101 // themselves also monotonic in that sense. See check_monotonicity()
  3102 // below.
  3103 bool CMSCollector::update_should_unload_classes() {
  3104   _should_unload_classes = false;
  3105   // Condition 1 above
  3106   if (_full_gc_requested && ExplicitGCInvokesConcurrentAndUnloadsClasses) {
  3107     _should_unload_classes = true;
  3108   } else if (CMSClassUnloadingEnabled) { // Condition 2.a above
  3109     // Disjuncts 2.b.(i,ii,iii) above
  3110     _should_unload_classes = (concurrent_cycles_since_last_unload() >=
  3111                               CMSClassUnloadingMaxInterval)
  3112                            || _permGen->should_concurrent_collect()
  3113                            || _cmsGen->is_too_full();
  3115   return _should_unload_classes;
  3118 bool ConcurrentMarkSweepGeneration::is_too_full() const {
  3119   bool res = should_concurrent_collect();
  3120   res = res && (occupancy() > (double)CMSIsTooFullPercentage/100.0);
  3121   return res;
  3124 void CMSCollector::setup_cms_unloading_and_verification_state() {
  3125   const  bool should_verify =    VerifyBeforeGC || VerifyAfterGC || VerifyDuringGC
  3126                              || VerifyBeforeExit;
  3127   const  int  rso           =    SharedHeap::SO_Symbols | SharedHeap::SO_Strings
  3128                              |   SharedHeap::SO_CodeCache;
  3130   if (should_unload_classes()) {   // Should unload classes this cycle
  3131     remove_root_scanning_option(rso);  // Shrink the root set appropriately
  3132     set_verifying(should_verify);    // Set verification state for this cycle
  3133     return;                            // Nothing else needs to be done at this time
  3136   // Not unloading classes this cycle
  3137   assert(!should_unload_classes(), "Inconsitency!");
  3138   if ((!verifying() || unloaded_classes_last_cycle()) && should_verify) {
  3139     // We were not verifying, or we _were_ unloading classes in the last cycle,
  3140     // AND some verification options are enabled this cycle; in this case,
  3141     // we must make sure that the deadness map is allocated if not already so,
  3142     // and cleared (if already allocated previously --
  3143     // CMSBitMap::sizeInBits() is used to determine if it's allocated).
  3144     if (perm_gen_verify_bit_map()->sizeInBits() == 0) {
  3145       if (!perm_gen_verify_bit_map()->allocate(_permGen->reserved())) {
  3146         warning("Failed to allocate permanent generation verification CMS Bit Map;\n"
  3147                 "permanent generation verification disabled");
  3148         return;  // Note that we leave verification disabled, so we'll retry this
  3149                  // allocation next cycle. We _could_ remember this failure
  3150                  // and skip further attempts and permanently disable verification
  3151                  // attempts if that is considered more desirable.
  3153       assert(perm_gen_verify_bit_map()->covers(_permGen->reserved()),
  3154               "_perm_gen_ver_bit_map inconsistency?");
  3155     } else {
  3156       perm_gen_verify_bit_map()->clear_all();
  3158     // Include symbols, strings and code cache elements to prevent their resurrection.
  3159     add_root_scanning_option(rso);
  3160     set_verifying(true);
  3161   } else if (verifying() && !should_verify) {
  3162     // We were verifying, but some verification flags got disabled.
  3163     set_verifying(false);
  3164     // Exclude symbols, strings and code cache elements from root scanning to
  3165     // reduce IM and RM pauses.
  3166     remove_root_scanning_option(rso);
  3171 #ifndef PRODUCT
  3172 HeapWord* CMSCollector::block_start(const void* p) const {
  3173   const HeapWord* addr = (HeapWord*)p;
  3174   if (_span.contains(p)) {
  3175     if (_cmsGen->cmsSpace()->is_in_reserved(addr)) {
  3176       return _cmsGen->cmsSpace()->block_start(p);
  3177     } else {
  3178       assert(_permGen->cmsSpace()->is_in_reserved(addr),
  3179              "Inconsistent _span?");
  3180       return _permGen->cmsSpace()->block_start(p);
  3183   return NULL;
  3185 #endif
  3187 HeapWord*
  3188 ConcurrentMarkSweepGeneration::expand_and_allocate(size_t word_size,
  3189                                                    bool   tlab,
  3190                                                    bool   parallel) {
  3191   assert(!tlab, "Can't deal with TLAB allocation");
  3192   MutexLockerEx x(freelistLock(), Mutex::_no_safepoint_check_flag);
  3193   expand(word_size*HeapWordSize, MinHeapDeltaBytes,
  3194     CMSExpansionCause::_satisfy_allocation);
  3195   if (GCExpandToAllocateDelayMillis > 0) {
  3196     os::sleep(Thread::current(), GCExpandToAllocateDelayMillis, false);
  3198   return have_lock_and_allocate(word_size, tlab);
  3201 // YSR: All of this generation expansion/shrinking stuff is an exact copy of
  3202 // OneContigSpaceCardGeneration, which makes me wonder if we should move this
  3203 // to CardGeneration and share it...
  3204 bool ConcurrentMarkSweepGeneration::expand(size_t bytes, size_t expand_bytes) {
  3205   return CardGeneration::expand(bytes, expand_bytes);
  3208 void ConcurrentMarkSweepGeneration::expand(size_t bytes, size_t expand_bytes,
  3209   CMSExpansionCause::Cause cause)
  3212   bool success = expand(bytes, expand_bytes);
  3214   // remember why we expanded; this information is used
  3215   // by shouldConcurrentCollect() when making decisions on whether to start
  3216   // a new CMS cycle.
  3217   if (success) {
  3218     set_expansion_cause(cause);
  3219     if (PrintGCDetails && Verbose) {
  3220       gclog_or_tty->print_cr("Expanded CMS gen for %s",
  3221         CMSExpansionCause::to_string(cause));
  3226 HeapWord* ConcurrentMarkSweepGeneration::expand_and_par_lab_allocate(CMSParGCThreadState* ps, size_t word_sz) {
  3227   HeapWord* res = NULL;
  3228   MutexLocker x(ParGCRareEvent_lock);
  3229   while (true) {
  3230     // Expansion by some other thread might make alloc OK now:
  3231     res = ps->lab.alloc(word_sz);
  3232     if (res != NULL) return res;
  3233     // If there's not enough expansion space available, give up.
  3234     if (_virtual_space.uncommitted_size() < (word_sz * HeapWordSize)) {
  3235       return NULL;
  3237     // Otherwise, we try expansion.
  3238     expand(word_sz*HeapWordSize, MinHeapDeltaBytes,
  3239       CMSExpansionCause::_allocate_par_lab);
  3240     // Now go around the loop and try alloc again;
  3241     // A competing par_promote might beat us to the expansion space,
  3242     // so we may go around the loop again if promotion fails agaion.
  3243     if (GCExpandToAllocateDelayMillis > 0) {
  3244       os::sleep(Thread::current(), GCExpandToAllocateDelayMillis, false);
  3250 bool ConcurrentMarkSweepGeneration::expand_and_ensure_spooling_space(
  3251   PromotionInfo* promo) {
  3252   MutexLocker x(ParGCRareEvent_lock);
  3253   size_t refill_size_bytes = promo->refillSize() * HeapWordSize;
  3254   while (true) {
  3255     // Expansion by some other thread might make alloc OK now:
  3256     if (promo->ensure_spooling_space()) {
  3257       assert(promo->has_spooling_space(),
  3258              "Post-condition of successful ensure_spooling_space()");
  3259       return true;
  3261     // If there's not enough expansion space available, give up.
  3262     if (_virtual_space.uncommitted_size() < refill_size_bytes) {
  3263       return false;
  3265     // Otherwise, we try expansion.
  3266     expand(refill_size_bytes, MinHeapDeltaBytes,
  3267       CMSExpansionCause::_allocate_par_spooling_space);
  3268     // Now go around the loop and try alloc again;
  3269     // A competing allocation might beat us to the expansion space,
  3270     // so we may go around the loop again if allocation fails again.
  3271     if (GCExpandToAllocateDelayMillis > 0) {
  3272       os::sleep(Thread::current(), GCExpandToAllocateDelayMillis, false);
  3279 void ConcurrentMarkSweepGeneration::shrink(size_t bytes) {
  3280   assert_locked_or_safepoint(Heap_lock);
  3281   size_t size = ReservedSpace::page_align_size_down(bytes);
  3282   if (size > 0) {
  3283     shrink_by(size);
  3287 bool ConcurrentMarkSweepGeneration::grow_by(size_t bytes) {
  3288   assert_locked_or_safepoint(Heap_lock);
  3289   bool result = _virtual_space.expand_by(bytes);
  3290   if (result) {
  3291     HeapWord* old_end = _cmsSpace->end();
  3292     size_t new_word_size =
  3293       heap_word_size(_virtual_space.committed_size());
  3294     MemRegion mr(_cmsSpace->bottom(), new_word_size);
  3295     _bts->resize(new_word_size);  // resize the block offset shared array
  3296     Universe::heap()->barrier_set()->resize_covered_region(mr);
  3297     // Hmmmm... why doesn't CFLS::set_end verify locking?
  3298     // This is quite ugly; FIX ME XXX
  3299     _cmsSpace->assert_locked();
  3300     _cmsSpace->set_end((HeapWord*)_virtual_space.high());
  3302     // update the space and generation capacity counters
  3303     if (UsePerfData) {
  3304       _space_counters->update_capacity();
  3305       _gen_counters->update_all();
  3308     if (Verbose && PrintGC) {
  3309       size_t new_mem_size = _virtual_space.committed_size();
  3310       size_t old_mem_size = new_mem_size - bytes;
  3311       gclog_or_tty->print_cr("Expanding %s from %ldK by %ldK to %ldK",
  3312                     name(), old_mem_size/K, bytes/K, new_mem_size/K);
  3315   return result;
  3318 bool ConcurrentMarkSweepGeneration::grow_to_reserved() {
  3319   assert_locked_or_safepoint(Heap_lock);
  3320   bool success = true;
  3321   const size_t remaining_bytes = _virtual_space.uncommitted_size();
  3322   if (remaining_bytes > 0) {
  3323     success = grow_by(remaining_bytes);
  3324     DEBUG_ONLY(if (!success) warning("grow to reserved failed");)
  3326   return success;
  3329 void ConcurrentMarkSweepGeneration::shrink_by(size_t bytes) {
  3330   assert_locked_or_safepoint(Heap_lock);
  3331   assert_lock_strong(freelistLock());
  3332   // XXX Fix when compaction is implemented.
  3333   warning("Shrinking of CMS not yet implemented");
  3334   return;
  3338 // Simple ctor/dtor wrapper for accounting & timer chores around concurrent
  3339 // phases.
  3340 class CMSPhaseAccounting: public StackObj {
  3341  public:
  3342   CMSPhaseAccounting(CMSCollector *collector,
  3343                      const char *phase,
  3344                      bool print_cr = true);
  3345   ~CMSPhaseAccounting();
  3347  private:
  3348   CMSCollector *_collector;
  3349   const char *_phase;
  3350   elapsedTimer _wallclock;
  3351   bool _print_cr;
  3353  public:
  3354   // Not MT-safe; so do not pass around these StackObj's
  3355   // where they may be accessed by other threads.
  3356   jlong wallclock_millis() {
  3357     assert(_wallclock.is_active(), "Wall clock should not stop");
  3358     _wallclock.stop();  // to record time
  3359     jlong ret = _wallclock.milliseconds();
  3360     _wallclock.start(); // restart
  3361     return ret;
  3363 };
  3365 CMSPhaseAccounting::CMSPhaseAccounting(CMSCollector *collector,
  3366                                        const char *phase,
  3367                                        bool print_cr) :
  3368   _collector(collector), _phase(phase), _print_cr(print_cr) {
  3370   if (PrintCMSStatistics != 0) {
  3371     _collector->resetYields();
  3373   if (PrintGCDetails && PrintGCTimeStamps) {
  3374     gclog_or_tty->date_stamp(PrintGCDateStamps);
  3375     gclog_or_tty->stamp();
  3376     gclog_or_tty->print_cr(": [%s-concurrent-%s-start]",
  3377       _collector->cmsGen()->short_name(), _phase);
  3379   _collector->resetTimer();
  3380   _wallclock.start();
  3381   _collector->startTimer();
  3384 CMSPhaseAccounting::~CMSPhaseAccounting() {
  3385   assert(_wallclock.is_active(), "Wall clock should not have stopped");
  3386   _collector->stopTimer();
  3387   _wallclock.stop();
  3388   if (PrintGCDetails) {
  3389     gclog_or_tty->date_stamp(PrintGCDateStamps);
  3390     if (PrintGCTimeStamps) {
  3391       gclog_or_tty->stamp();
  3392       gclog_or_tty->print(": ");
  3394     gclog_or_tty->print("[%s-concurrent-%s: %3.3f/%3.3f secs]",
  3395                  _collector->cmsGen()->short_name(),
  3396                  _phase, _collector->timerValue(), _wallclock.seconds());
  3397     if (_print_cr) {
  3398       gclog_or_tty->print_cr("");
  3400     if (PrintCMSStatistics != 0) {
  3401       gclog_or_tty->print_cr(" (CMS-concurrent-%s yielded %d times)", _phase,
  3402                     _collector->yields());
  3407 // CMS work
  3409 // Checkpoint the roots into this generation from outside
  3410 // this generation. [Note this initial checkpoint need only
  3411 // be approximate -- we'll do a catch up phase subsequently.]
  3412 void CMSCollector::checkpointRootsInitial(bool asynch) {
  3413   assert(_collectorState == InitialMarking, "Wrong collector state");
  3414   check_correct_thread_executing();
  3415   ReferenceProcessor* rp = ref_processor();
  3416   SpecializationStats::clear();
  3417   assert(_restart_addr == NULL, "Control point invariant");
  3418   if (asynch) {
  3419     // acquire locks for subsequent manipulations
  3420     MutexLockerEx x(bitMapLock(),
  3421                     Mutex::_no_safepoint_check_flag);
  3422     checkpointRootsInitialWork(asynch);
  3423     rp->verify_no_references_recorded();
  3424     rp->enable_discovery(); // enable ("weak") refs discovery
  3425     _collectorState = Marking;
  3426   } else {
  3427     // (Weak) Refs discovery: this is controlled from genCollectedHeap::do_collection
  3428     // which recognizes if we are a CMS generation, and doesn't try to turn on
  3429     // discovery; verify that they aren't meddling.
  3430     assert(!rp->discovery_is_atomic(),
  3431            "incorrect setting of discovery predicate");
  3432     assert(!rp->discovery_enabled(), "genCollectedHeap shouldn't control "
  3433            "ref discovery for this generation kind");
  3434     // already have locks
  3435     checkpointRootsInitialWork(asynch);
  3436     rp->enable_discovery(); // now enable ("weak") refs discovery
  3437     _collectorState = Marking;
  3439   SpecializationStats::print();
  3442 void CMSCollector::checkpointRootsInitialWork(bool asynch) {
  3443   assert(SafepointSynchronize::is_at_safepoint(), "world should be stopped");
  3444   assert(_collectorState == InitialMarking, "just checking");
  3446   // If there has not been a GC[n-1] since last GC[n] cycle completed,
  3447   // precede our marking with a collection of all
  3448   // younger generations to keep floating garbage to a minimum.
  3449   // XXX: we won't do this for now -- it's an optimization to be done later.
  3451   // already have locks
  3452   assert_lock_strong(bitMapLock());
  3453   assert(_markBitMap.isAllClear(), "was reset at end of previous cycle");
  3455   // Setup the verification and class unloading state for this
  3456   // CMS collection cycle.
  3457   setup_cms_unloading_and_verification_state();
  3459   NOT_PRODUCT(TraceTime t("\ncheckpointRootsInitialWork",
  3460     PrintGCDetails && Verbose, true, gclog_or_tty);)
  3461   if (UseAdaptiveSizePolicy) {
  3462     size_policy()->checkpoint_roots_initial_begin();
  3465   // Reset all the PLAB chunk arrays if necessary.
  3466   if (_survivor_plab_array != NULL && !CMSPLABRecordAlways) {
  3467     reset_survivor_plab_arrays();
  3470   ResourceMark rm;
  3471   HandleMark  hm;
  3473   FalseClosure falseClosure;
  3474   // In the case of a synchronous collection, we will elide the
  3475   // remark step, so it's important to catch all the nmethod oops
  3476   // in this step; hence the last argument to the constrcutor below.
  3477   MarkRefsIntoClosure notOlder(_span, &_markBitMap, !asynch /* nmethods */);
  3478   GenCollectedHeap* gch = GenCollectedHeap::heap();
  3480   verify_work_stacks_empty();
  3481   verify_overflow_empty();
  3483   gch->ensure_parsability(false);  // fill TLABs, but no need to retire them
  3484   // Update the saved marks which may affect the root scans.
  3485   gch->save_marks();
  3487   // weak reference processing has not started yet.
  3488   ref_processor()->set_enqueuing_is_done(false);
  3491     COMPILER2_PRESENT(DerivedPointerTableDeactivate dpt_deact;)
  3492     gch->rem_set()->prepare_for_younger_refs_iterate(false); // Not parallel.
  3493     gch->gen_process_strong_roots(_cmsGen->level(),
  3494                                   true,   // younger gens are roots
  3495                                   true,   // collecting perm gen
  3496                                   SharedHeap::ScanningOption(roots_scanning_options()),
  3497                                   NULL, &notOlder);
  3500   // Clear mod-union table; it will be dirtied in the prologue of
  3501   // CMS generation per each younger generation collection.
  3503   assert(_modUnionTable.isAllClear(),
  3504        "Was cleared in most recent final checkpoint phase"
  3505        " or no bits are set in the gc_prologue before the start of the next "
  3506        "subsequent marking phase.");
  3508   // Temporarily disabled, since pre/post-consumption closures don't
  3509   // care about precleaned cards
  3510   #if 0
  3512     MemRegion mr = MemRegion((HeapWord*)_virtual_space.low(),
  3513                              (HeapWord*)_virtual_space.high());
  3514     _ct->ct_bs()->preclean_dirty_cards(mr);
  3516   #endif
  3518   // Save the end of the used_region of the constituent generations
  3519   // to be used to limit the extent of sweep in each generation.
  3520   save_sweep_limits();
  3521   if (UseAdaptiveSizePolicy) {
  3522     size_policy()->checkpoint_roots_initial_end(gch->gc_cause());
  3524   verify_overflow_empty();
  3527 bool CMSCollector::markFromRoots(bool asynch) {
  3528   // we might be tempted to assert that:
  3529   // assert(asynch == !SafepointSynchronize::is_at_safepoint(),
  3530   //        "inconsistent argument?");
  3531   // However that wouldn't be right, because it's possible that
  3532   // a safepoint is indeed in progress as a younger generation
  3533   // stop-the-world GC happens even as we mark in this generation.
  3534   assert(_collectorState == Marking, "inconsistent state?");
  3535   check_correct_thread_executing();
  3536   verify_overflow_empty();
  3538   bool res;
  3539   if (asynch) {
  3541     // Start the timers for adaptive size policy for the concurrent phases
  3542     // Do it here so that the foreground MS can use the concurrent
  3543     // timer since a foreground MS might has the sweep done concurrently
  3544     // or STW.
  3545     if (UseAdaptiveSizePolicy) {
  3546       size_policy()->concurrent_marking_begin();
  3549     // Weak ref discovery note: We may be discovering weak
  3550     // refs in this generation concurrent (but interleaved) with
  3551     // weak ref discovery by a younger generation collector.
  3553     CMSTokenSyncWithLocks ts(true, bitMapLock());
  3554     TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty);
  3555     CMSPhaseAccounting pa(this, "mark", !PrintGCDetails);
  3556     res = markFromRootsWork(asynch);
  3557     if (res) {
  3558       _collectorState = Precleaning;
  3559     } else { // We failed and a foreground collection wants to take over
  3560       assert(_foregroundGCIsActive, "internal state inconsistency");
  3561       assert(_restart_addr == NULL,  "foreground will restart from scratch");
  3562       if (PrintGCDetails) {
  3563         gclog_or_tty->print_cr("bailing out to foreground collection");
  3566     if (UseAdaptiveSizePolicy) {
  3567       size_policy()->concurrent_marking_end();
  3569   } else {
  3570     assert(SafepointSynchronize::is_at_safepoint(),
  3571            "inconsistent with asynch == false");
  3572     if (UseAdaptiveSizePolicy) {
  3573       size_policy()->ms_collection_marking_begin();
  3575     // already have locks
  3576     res = markFromRootsWork(asynch);
  3577     _collectorState = FinalMarking;
  3578     if (UseAdaptiveSizePolicy) {
  3579       GenCollectedHeap* gch = GenCollectedHeap::heap();
  3580       size_policy()->ms_collection_marking_end(gch->gc_cause());
  3583   verify_overflow_empty();
  3584   return res;
  3587 bool CMSCollector::markFromRootsWork(bool asynch) {
  3588   // iterate over marked bits in bit map, doing a full scan and mark
  3589   // from these roots using the following algorithm:
  3590   // . if oop is to the right of the current scan pointer,
  3591   //   mark corresponding bit (we'll process it later)
  3592   // . else (oop is to left of current scan pointer)
  3593   //   push oop on marking stack
  3594   // . drain the marking stack
  3596   // Note that when we do a marking step we need to hold the
  3597   // bit map lock -- recall that direct allocation (by mutators)
  3598   // and promotion (by younger generation collectors) is also
  3599   // marking the bit map. [the so-called allocate live policy.]
  3600   // Because the implementation of bit map marking is not
  3601   // robust wrt simultaneous marking of bits in the same word,
  3602   // we need to make sure that there is no such interference
  3603   // between concurrent such updates.
  3605   // already have locks
  3606   assert_lock_strong(bitMapLock());
  3608   // Clear the revisit stack, just in case there are any
  3609   // obsolete contents from a short-circuited previous CMS cycle.
  3610   _revisitStack.reset();
  3611   verify_work_stacks_empty();
  3612   verify_overflow_empty();
  3613   assert(_revisitStack.isEmpty(), "tabula rasa");
  3615   bool result = false;
  3616   if (CMSConcurrentMTEnabled && ParallelCMSThreads > 0) {
  3617     result = do_marking_mt(asynch);
  3618   } else {
  3619     result = do_marking_st(asynch);
  3621   return result;
  3624 // Forward decl
  3625 class CMSConcMarkingTask;
  3627 class CMSConcMarkingTerminator: public ParallelTaskTerminator {
  3628   CMSCollector*       _collector;
  3629   CMSConcMarkingTask* _task;
  3630   bool _yield;
  3631  protected:
  3632   virtual void yield();
  3633  public:
  3634   // "n_threads" is the number of threads to be terminated.
  3635   // "queue_set" is a set of work queues of other threads.
  3636   // "collector" is the CMS collector associated with this task terminator.
  3637   // "yield" indicates whether we need the gang as a whole to yield.
  3638   CMSConcMarkingTerminator(int n_threads, TaskQueueSetSuper* queue_set,
  3639                            CMSCollector* collector, bool yield) :
  3640     ParallelTaskTerminator(n_threads, queue_set),
  3641     _collector(collector),
  3642     _yield(yield) { }
  3644   void set_task(CMSConcMarkingTask* task) {
  3645     _task = task;
  3647 };
  3649 // MT Concurrent Marking Task
  3650 class CMSConcMarkingTask: public YieldingFlexibleGangTask {
  3651   CMSCollector* _collector;
  3652   YieldingFlexibleWorkGang* _workers;        // the whole gang
  3653   int           _n_workers;                  // requested/desired # workers
  3654   bool          _asynch;
  3655   bool          _result;
  3656   CompactibleFreeListSpace*  _cms_space;
  3657   CompactibleFreeListSpace* _perm_space;
  3658   HeapWord*     _global_finger;
  3659   HeapWord*     _restart_addr;
  3661   //  Exposed here for yielding support
  3662   Mutex* const _bit_map_lock;
  3664   // The per thread work queues, available here for stealing
  3665   OopTaskQueueSet*  _task_queues;
  3666   CMSConcMarkingTerminator _term;
  3668  public:
  3669   CMSConcMarkingTask(CMSCollector* collector,
  3670                  CompactibleFreeListSpace* cms_space,
  3671                  CompactibleFreeListSpace* perm_space,
  3672                  bool asynch, int n_workers,
  3673                  YieldingFlexibleWorkGang* workers,
  3674                  OopTaskQueueSet* task_queues):
  3675     YieldingFlexibleGangTask("Concurrent marking done multi-threaded"),
  3676     _collector(collector),
  3677     _cms_space(cms_space),
  3678     _perm_space(perm_space),
  3679     _asynch(asynch), _n_workers(n_workers), _result(true),
  3680     _workers(workers), _task_queues(task_queues),
  3681     _term(n_workers, task_queues, _collector, asynch),
  3682     _bit_map_lock(collector->bitMapLock())
  3684     assert(n_workers <= workers->total_workers(),
  3685            "Else termination won't work correctly today"); // XXX FIX ME!
  3686     _requested_size = n_workers;
  3687     _term.set_task(this);
  3688     assert(_cms_space->bottom() < _perm_space->bottom(),
  3689            "Finger incorrectly initialized below");
  3690     _restart_addr = _global_finger = _cms_space->bottom();
  3694   OopTaskQueueSet* task_queues()  { return _task_queues; }
  3696   OopTaskQueue* work_queue(int i) { return task_queues()->queue(i); }
  3698   HeapWord** global_finger_addr() { return &_global_finger; }
  3700   CMSConcMarkingTerminator* terminator() { return &_term; }
  3702   void work(int i);
  3704   virtual void coordinator_yield();  // stuff done by coordinator
  3705   bool result() { return _result; }
  3707   void reset(HeapWord* ra) {
  3708     assert(_global_finger >= _cms_space->end(),  "Postcondition of ::work(i)");
  3709     assert(_global_finger >= _perm_space->end(), "Postcondition of ::work(i)");
  3710     assert(ra             <  _perm_space->end(), "ra too large");
  3711     _restart_addr = _global_finger = ra;
  3712     _term.reset_for_reuse();
  3715   static bool get_work_from_overflow_stack(CMSMarkStack* ovflw_stk,
  3716                                            OopTaskQueue* work_q);
  3718  private:
  3719   void do_scan_and_mark(int i, CompactibleFreeListSpace* sp);
  3720   void do_work_steal(int i);
  3721   void bump_global_finger(HeapWord* f);
  3722 };
  3724 void CMSConcMarkingTerminator::yield() {
  3725   if (ConcurrentMarkSweepThread::should_yield() &&
  3726       !_collector->foregroundGCIsActive() &&
  3727       _yield) {
  3728     _task->yield();
  3729   } else {
  3730     ParallelTaskTerminator::yield();
  3734 ////////////////////////////////////////////////////////////////
  3735 // Concurrent Marking Algorithm Sketch
  3736 ////////////////////////////////////////////////////////////////
  3737 // Until all tasks exhausted (both spaces):
  3738 // -- claim next available chunk
  3739 // -- bump global finger via CAS
  3740 // -- find first object that starts in this chunk
  3741 //    and start scanning bitmap from that position
  3742 // -- scan marked objects for oops
  3743 // -- CAS-mark target, and if successful:
  3744 //    . if target oop is above global finger (volatile read)
  3745 //      nothing to do
  3746 //    . if target oop is in chunk and above local finger
  3747 //        then nothing to do
  3748 //    . else push on work-queue
  3749 // -- Deal with possible overflow issues:
  3750 //    . local work-queue overflow causes stuff to be pushed on
  3751 //      global (common) overflow queue
  3752 //    . always first empty local work queue
  3753 //    . then get a batch of oops from global work queue if any
  3754 //    . then do work stealing
  3755 // -- When all tasks claimed (both spaces)
  3756 //    and local work queue empty,
  3757 //    then in a loop do:
  3758 //    . check global overflow stack; steal a batch of oops and trace
  3759 //    . try to steal from other threads oif GOS is empty
  3760 //    . if neither is available, offer termination
  3761 // -- Terminate and return result
  3762 //
  3763 void CMSConcMarkingTask::work(int i) {
  3764   elapsedTimer _timer;
  3765   ResourceMark rm;
  3766   HandleMark hm;
  3768   DEBUG_ONLY(_collector->verify_overflow_empty();)
  3770   // Before we begin work, our work queue should be empty
  3771   assert(work_queue(i)->size() == 0, "Expected to be empty");
  3772   // Scan the bitmap covering _cms_space, tracing through grey objects.
  3773   _timer.start();
  3774   do_scan_and_mark(i, _cms_space);
  3775   _timer.stop();
  3776   if (PrintCMSStatistics != 0) {
  3777     gclog_or_tty->print_cr("Finished cms space scanning in %dth thread: %3.3f sec",
  3778       i, _timer.seconds()); // XXX: need xxx/xxx type of notation, two timers
  3781   // ... do the same for the _perm_space
  3782   _timer.reset();
  3783   _timer.start();
  3784   do_scan_and_mark(i, _perm_space);
  3785   _timer.stop();
  3786   if (PrintCMSStatistics != 0) {
  3787     gclog_or_tty->print_cr("Finished perm space scanning in %dth thread: %3.3f sec",
  3788       i, _timer.seconds()); // XXX: need xxx/xxx type of notation, two timers
  3791   // ... do work stealing
  3792   _timer.reset();
  3793   _timer.start();
  3794   do_work_steal(i);
  3795   _timer.stop();
  3796   if (PrintCMSStatistics != 0) {
  3797     gclog_or_tty->print_cr("Finished work stealing in %dth thread: %3.3f sec",
  3798       i, _timer.seconds()); // XXX: need xxx/xxx type of notation, two timers
  3800   assert(_collector->_markStack.isEmpty(), "Should have been emptied");
  3801   assert(work_queue(i)->size() == 0, "Should have been emptied");
  3802   // Note that under the current task protocol, the
  3803   // following assertion is true even of the spaces
  3804   // expanded since the completion of the concurrent
  3805   // marking. XXX This will likely change under a strict
  3806   // ABORT semantics.
  3807   assert(_global_finger >  _cms_space->end() &&
  3808          _global_finger >= _perm_space->end(),
  3809          "All tasks have been completed");
  3810   DEBUG_ONLY(_collector->verify_overflow_empty();)
  3813 void CMSConcMarkingTask::bump_global_finger(HeapWord* f) {
  3814   HeapWord* read = _global_finger;
  3815   HeapWord* cur  = read;
  3816   while (f > read) {
  3817     cur = read;
  3818     read = (HeapWord*) Atomic::cmpxchg_ptr(f, &_global_finger, cur);
  3819     if (cur == read) {
  3820       // our cas succeeded
  3821       assert(_global_finger >= f, "protocol consistency");
  3822       break;
  3827 // This is really inefficient, and should be redone by
  3828 // using (not yet available) block-read and -write interfaces to the
  3829 // stack and the work_queue. XXX FIX ME !!!
  3830 bool CMSConcMarkingTask::get_work_from_overflow_stack(CMSMarkStack* ovflw_stk,
  3831                                                       OopTaskQueue* work_q) {
  3832   // Fast lock-free check
  3833   if (ovflw_stk->length() == 0) {
  3834     return false;
  3836   assert(work_q->size() == 0, "Shouldn't steal");
  3837   MutexLockerEx ml(ovflw_stk->par_lock(),
  3838                    Mutex::_no_safepoint_check_flag);
  3839   // Grab up to 1/4 the size of the work queue
  3840   size_t num = MIN2((size_t)work_q->max_elems()/4,
  3841                     (size_t)ParGCDesiredObjsFromOverflowList);
  3842   num = MIN2(num, ovflw_stk->length());
  3843   for (int i = (int) num; i > 0; i--) {
  3844     oop cur = ovflw_stk->pop();
  3845     assert(cur != NULL, "Counted wrong?");
  3846     work_q->push(cur);
  3848   return num > 0;
  3851 void CMSConcMarkingTask::do_scan_and_mark(int i, CompactibleFreeListSpace* sp) {
  3852   SequentialSubTasksDone* pst = sp->conc_par_seq_tasks();
  3853   int n_tasks = pst->n_tasks();
  3854   // We allow that there may be no tasks to do here because
  3855   // we are restarting after a stack overflow.
  3856   assert(pst->valid() || n_tasks == 0, "Uninitialized use?");
  3857   int nth_task = 0;
  3859   HeapWord* aligned_start = sp->bottom();
  3860   if (sp->used_region().contains(_restart_addr)) {
  3861     // Align down to a card boundary for the start of 0th task
  3862     // for this space.
  3863     aligned_start =
  3864       (HeapWord*)align_size_down((uintptr_t)_restart_addr,
  3865                                  CardTableModRefBS::card_size);
  3868   size_t chunk_size = sp->marking_task_size();
  3869   while (!pst->is_task_claimed(/* reference */ nth_task)) {
  3870     // Having claimed the nth task in this space,
  3871     // compute the chunk that it corresponds to:
  3872     MemRegion span = MemRegion(aligned_start + nth_task*chunk_size,
  3873                                aligned_start + (nth_task+1)*chunk_size);
  3874     // Try and bump the global finger via a CAS;
  3875     // note that we need to do the global finger bump
  3876     // _before_ taking the intersection below, because
  3877     // the task corresponding to that region will be
  3878     // deemed done even if the used_region() expands
  3879     // because of allocation -- as it almost certainly will
  3880     // during start-up while the threads yield in the
  3881     // closure below.
  3882     HeapWord* finger = span.end();
  3883     bump_global_finger(finger);   // atomically
  3884     // There are null tasks here corresponding to chunks
  3885     // beyond the "top" address of the space.
  3886     span = span.intersection(sp->used_region());
  3887     if (!span.is_empty()) {  // Non-null task
  3888       HeapWord* prev_obj;
  3889       assert(!span.contains(_restart_addr) || nth_task == 0,
  3890              "Inconsistency");
  3891       if (nth_task == 0) {
  3892         // For the 0th task, we'll not need to compute a block_start.
  3893         if (span.contains(_restart_addr)) {
  3894           // In the case of a restart because of stack overflow,
  3895           // we might additionally skip a chunk prefix.
  3896           prev_obj = _restart_addr;
  3897         } else {
  3898           prev_obj = span.start();
  3900       } else {
  3901         // We want to skip the first object because
  3902         // the protocol is to scan any object in its entirety
  3903         // that _starts_ in this span; a fortiori, any
  3904         // object starting in an earlier span is scanned
  3905         // as part of an earlier claimed task.
  3906         // Below we use the "careful" version of block_start
  3907         // so we do not try to navigate uninitialized objects.
  3908         prev_obj = sp->block_start_careful(span.start());
  3909         // Below we use a variant of block_size that uses the
  3910         // Printezis bits to avoid waiting for allocated
  3911         // objects to become initialized/parsable.
  3912         while (prev_obj < span.start()) {
  3913           size_t sz = sp->block_size_no_stall(prev_obj, _collector);
  3914           if (sz > 0) {
  3915             prev_obj += sz;
  3916           } else {
  3917             // In this case we may end up doing a bit of redundant
  3918             // scanning, but that appears unavoidable, short of
  3919             // locking the free list locks; see bug 6324141.
  3920             break;
  3924       if (prev_obj < span.end()) {
  3925         MemRegion my_span = MemRegion(prev_obj, span.end());
  3926         // Do the marking work within a non-empty span --
  3927         // the last argument to the constructor indicates whether the
  3928         // iteration should be incremental with periodic yields.
  3929         Par_MarkFromRootsClosure cl(this, _collector, my_span,
  3930                                     &_collector->_markBitMap,
  3931                                     work_queue(i),
  3932                                     &_collector->_markStack,
  3933                                     &_collector->_revisitStack,
  3934                                     _asynch);
  3935         _collector->_markBitMap.iterate(&cl, my_span.start(), my_span.end());
  3936       } // else nothing to do for this task
  3937     }   // else nothing to do for this task
  3939   // We'd be tempted to assert here that since there are no
  3940   // more tasks left to claim in this space, the global_finger
  3941   // must exceed space->top() and a fortiori space->end(). However,
  3942   // that would not quite be correct because the bumping of
  3943   // global_finger occurs strictly after the claiming of a task,
  3944   // so by the time we reach here the global finger may not yet
  3945   // have been bumped up by the thread that claimed the last
  3946   // task.
  3947   pst->all_tasks_completed();
  3950 class Par_ConcMarkingClosure: public OopClosure {
  3951  private:
  3952   CMSCollector* _collector;
  3953   MemRegion     _span;
  3954   CMSBitMap*    _bit_map;
  3955   CMSMarkStack* _overflow_stack;
  3956   CMSMarkStack* _revisit_stack;     // XXXXXX Check proper use
  3957   OopTaskQueue* _work_queue;
  3958  protected:
  3959   DO_OOP_WORK_DEFN
  3960  public:
  3961   Par_ConcMarkingClosure(CMSCollector* collector, OopTaskQueue* work_queue,
  3962                          CMSBitMap* bit_map, CMSMarkStack* overflow_stack):
  3963     _collector(collector),
  3964     _span(_collector->_span),
  3965     _work_queue(work_queue),
  3966     _bit_map(bit_map),
  3967     _overflow_stack(overflow_stack) { }   // need to initialize revisit stack etc.
  3968   virtual void do_oop(oop* p);
  3969   virtual void do_oop(narrowOop* p);
  3970   void trim_queue(size_t max);
  3971   void handle_stack_overflow(HeapWord* lost);
  3972 };
  3974 // Grey object scanning during work stealing phase --
  3975 // the salient assumption here is that any references
  3976 // that are in these stolen objects being scanned must
  3977 // already have been initialized (else they would not have
  3978 // been published), so we do not need to check for
  3979 // uninitialized objects before pushing here.
  3980 void Par_ConcMarkingClosure::do_oop(oop obj) {
  3981   assert(obj->is_oop_or_null(true), "expected an oop or NULL");
  3982   HeapWord* addr = (HeapWord*)obj;
  3983   // Check if oop points into the CMS generation
  3984   // and is not marked
  3985   if (_span.contains(addr) && !_bit_map->isMarked(addr)) {
  3986     // a white object ...
  3987     // If we manage to "claim" the object, by being the
  3988     // first thread to mark it, then we push it on our
  3989     // marking stack
  3990     if (_bit_map->par_mark(addr)) {     // ... now grey
  3991       // push on work queue (grey set)
  3992       bool simulate_overflow = false;
  3993       NOT_PRODUCT(
  3994         if (CMSMarkStackOverflowALot &&
  3995             _collector->simulate_overflow()) {
  3996           // simulate a stack overflow
  3997           simulate_overflow = true;
  4000       if (simulate_overflow ||
  4001           !(_work_queue->push(obj) || _overflow_stack->par_push(obj))) {
  4002         // stack overflow
  4003         if (PrintCMSStatistics != 0) {
  4004           gclog_or_tty->print_cr("CMS marking stack overflow (benign) at "
  4005                                  SIZE_FORMAT, _overflow_stack->capacity());
  4007         // We cannot assert that the overflow stack is full because
  4008         // it may have been emptied since.
  4009         assert(simulate_overflow ||
  4010                _work_queue->size() == _work_queue->max_elems(),
  4011               "Else push should have succeeded");
  4012         handle_stack_overflow(addr);
  4014     } // Else, some other thread got there first
  4018 void Par_ConcMarkingClosure::do_oop(oop* p)       { Par_ConcMarkingClosure::do_oop_work(p); }
  4019 void Par_ConcMarkingClosure::do_oop(narrowOop* p) { Par_ConcMarkingClosure::do_oop_work(p); }
  4021 void Par_ConcMarkingClosure::trim_queue(size_t max) {
  4022   while (_work_queue->size() > max) {
  4023     oop new_oop;
  4024     if (_work_queue->pop_local(new_oop)) {
  4025       assert(new_oop->is_oop(), "Should be an oop");
  4026       assert(_bit_map->isMarked((HeapWord*)new_oop), "Grey object");
  4027       assert(_span.contains((HeapWord*)new_oop), "Not in span");
  4028       assert(new_oop->is_parsable(), "Should be parsable");
  4029       new_oop->oop_iterate(this);  // do_oop() above
  4034 // Upon stack overflow, we discard (part of) the stack,
  4035 // remembering the least address amongst those discarded
  4036 // in CMSCollector's _restart_address.
  4037 void Par_ConcMarkingClosure::handle_stack_overflow(HeapWord* lost) {
  4038   // We need to do this under a mutex to prevent other
  4039   // workers from interfering with the work done below.
  4040   MutexLockerEx ml(_overflow_stack->par_lock(),
  4041                    Mutex::_no_safepoint_check_flag);
  4042   // Remember the least grey address discarded
  4043   HeapWord* ra = (HeapWord*)_overflow_stack->least_value(lost);
  4044   _collector->lower_restart_addr(ra);
  4045   _overflow_stack->reset();  // discard stack contents
  4046   _overflow_stack->expand(); // expand the stack if possible
  4050 void CMSConcMarkingTask::do_work_steal(int i) {
  4051   OopTaskQueue* work_q = work_queue(i);
  4052   oop obj_to_scan;
  4053   CMSBitMap* bm = &(_collector->_markBitMap);
  4054   CMSMarkStack* ovflw = &(_collector->_markStack);
  4055   int* seed = _collector->hash_seed(i);
  4056   Par_ConcMarkingClosure cl(_collector, work_q, bm, ovflw);
  4057   while (true) {
  4058     cl.trim_queue(0);
  4059     assert(work_q->size() == 0, "Should have been emptied above");
  4060     if (get_work_from_overflow_stack(ovflw, work_q)) {
  4061       // Can't assert below because the work obtained from the
  4062       // overflow stack may already have been stolen from us.
  4063       // assert(work_q->size() > 0, "Work from overflow stack");
  4064       continue;
  4065     } else if (task_queues()->steal(i, seed, /* reference */ obj_to_scan)) {
  4066       assert(obj_to_scan->is_oop(), "Should be an oop");
  4067       assert(bm->isMarked((HeapWord*)obj_to_scan), "Grey object");
  4068       obj_to_scan->oop_iterate(&cl);
  4069     } else if (terminator()->offer_termination()) {
  4070       assert(work_q->size() == 0, "Impossible!");
  4071       break;
  4076 // This is run by the CMS (coordinator) thread.
  4077 void CMSConcMarkingTask::coordinator_yield() {
  4078   assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  4079          "CMS thread should hold CMS token");
  4081   // First give up the locks, then yield, then re-lock
  4082   // We should probably use a constructor/destructor idiom to
  4083   // do this unlock/lock or modify the MutexUnlocker class to
  4084   // serve our purpose. XXX
  4085   assert_lock_strong(_bit_map_lock);
  4086   _bit_map_lock->unlock();
  4087   ConcurrentMarkSweepThread::desynchronize(true);
  4088   ConcurrentMarkSweepThread::acknowledge_yield_request();
  4089   _collector->stopTimer();
  4090   if (PrintCMSStatistics != 0) {
  4091     _collector->incrementYields();
  4093   _collector->icms_wait();
  4095   // It is possible for whichever thread initiated the yield request
  4096   // not to get a chance to wake up and take the bitmap lock between
  4097   // this thread releasing it and reacquiring it. So, while the
  4098   // should_yield() flag is on, let's sleep for a bit to give the
  4099   // other thread a chance to wake up. The limit imposed on the number
  4100   // of iterations is defensive, to avoid any unforseen circumstances
  4101   // putting us into an infinite loop. Since it's always been this
  4102   // (coordinator_yield()) method that was observed to cause the
  4103   // problem, we are using a parameter (CMSCoordinatorYieldSleepCount)
  4104   // which is by default non-zero. For the other seven methods that
  4105   // also perform the yield operation, as are using a different
  4106   // parameter (CMSYieldSleepCount) which is by default zero. This way we
  4107   // can enable the sleeping for those methods too, if necessary.
  4108   // See 6442774.
  4109   //
  4110   // We really need to reconsider the synchronization between the GC
  4111   // thread and the yield-requesting threads in the future and we
  4112   // should really use wait/notify, which is the recommended
  4113   // way of doing this type of interaction. Additionally, we should
  4114   // consolidate the eight methods that do the yield operation and they
  4115   // are almost identical into one for better maintenability and
  4116   // readability. See 6445193.
  4117   //
  4118   // Tony 2006.06.29
  4119   for (unsigned i = 0; i < CMSCoordinatorYieldSleepCount &&
  4120                    ConcurrentMarkSweepThread::should_yield() &&
  4121                    !CMSCollector::foregroundGCIsActive(); ++i) {
  4122     os::sleep(Thread::current(), 1, false);
  4123     ConcurrentMarkSweepThread::acknowledge_yield_request();
  4126   ConcurrentMarkSweepThread::synchronize(true);
  4127   _bit_map_lock->lock_without_safepoint_check();
  4128   _collector->startTimer();
  4131 bool CMSCollector::do_marking_mt(bool asynch) {
  4132   assert(ParallelCMSThreads > 0 && conc_workers() != NULL, "precondition");
  4133   // In the future this would be determined ergonomically, based
  4134   // on #cpu's, # active mutator threads (and load), and mutation rate.
  4135   int num_workers = ParallelCMSThreads;
  4137   CompactibleFreeListSpace* cms_space  = _cmsGen->cmsSpace();
  4138   CompactibleFreeListSpace* perm_space = _permGen->cmsSpace();
  4140   CMSConcMarkingTask tsk(this, cms_space, perm_space,
  4141                          asynch, num_workers /* number requested XXX */,
  4142                          conc_workers(), task_queues());
  4144   // Since the actual number of workers we get may be different
  4145   // from the number we requested above, do we need to do anything different
  4146   // below? In particular, may be we need to subclass the SequantialSubTasksDone
  4147   // class?? XXX
  4148   cms_space ->initialize_sequential_subtasks_for_marking(num_workers);
  4149   perm_space->initialize_sequential_subtasks_for_marking(num_workers);
  4151   // Refs discovery is already non-atomic.
  4152   assert(!ref_processor()->discovery_is_atomic(), "Should be non-atomic");
  4153   // Mutate the Refs discovery so it is MT during the
  4154   // multi-threaded marking phase.
  4155   ReferenceProcessorMTMutator mt(ref_processor(), num_workers > 1);
  4157   conc_workers()->start_task(&tsk);
  4158   while (tsk.yielded()) {
  4159     tsk.coordinator_yield();
  4160     conc_workers()->continue_task(&tsk);
  4162   // If the task was aborted, _restart_addr will be non-NULL
  4163   assert(tsk.completed() || _restart_addr != NULL, "Inconsistency");
  4164   while (_restart_addr != NULL) {
  4165     // XXX For now we do not make use of ABORTED state and have not
  4166     // yet implemented the right abort semantics (even in the original
  4167     // single-threaded CMS case). That needs some more investigation
  4168     // and is deferred for now; see CR# TBF. 07252005YSR. XXX
  4169     assert(!CMSAbortSemantics || tsk.aborted(), "Inconsistency");
  4170     // If _restart_addr is non-NULL, a marking stack overflow
  4171     // occured; we need to do a fresh marking iteration from the
  4172     // indicated restart address.
  4173     if (_foregroundGCIsActive && asynch) {
  4174       // We may be running into repeated stack overflows, having
  4175       // reached the limit of the stack size, while making very
  4176       // slow forward progress. It may be best to bail out and
  4177       // let the foreground collector do its job.
  4178       // Clear _restart_addr, so that foreground GC
  4179       // works from scratch. This avoids the headache of
  4180       // a "rescan" which would otherwise be needed because
  4181       // of the dirty mod union table & card table.
  4182       _restart_addr = NULL;
  4183       return false;
  4185     // Adjust the task to restart from _restart_addr
  4186     tsk.reset(_restart_addr);
  4187     cms_space ->initialize_sequential_subtasks_for_marking(num_workers,
  4188                   _restart_addr);
  4189     perm_space->initialize_sequential_subtasks_for_marking(num_workers,
  4190                   _restart_addr);
  4191     _restart_addr = NULL;
  4192     // Get the workers going again
  4193     conc_workers()->start_task(&tsk);
  4194     while (tsk.yielded()) {
  4195       tsk.coordinator_yield();
  4196       conc_workers()->continue_task(&tsk);
  4199   assert(tsk.completed(), "Inconsistency");
  4200   assert(tsk.result() == true, "Inconsistency");
  4201   return true;
  4204 bool CMSCollector::do_marking_st(bool asynch) {
  4205   ResourceMark rm;
  4206   HandleMark   hm;
  4208   MarkFromRootsClosure markFromRootsClosure(this, _span, &_markBitMap,
  4209     &_markStack, &_revisitStack, CMSYield && asynch);
  4210   // the last argument to iterate indicates whether the iteration
  4211   // should be incremental with periodic yields.
  4212   _markBitMap.iterate(&markFromRootsClosure);
  4213   // If _restart_addr is non-NULL, a marking stack overflow
  4214   // occured; we need to do a fresh iteration from the
  4215   // indicated restart address.
  4216   while (_restart_addr != NULL) {
  4217     if (_foregroundGCIsActive && asynch) {
  4218       // We may be running into repeated stack overflows, having
  4219       // reached the limit of the stack size, while making very
  4220       // slow forward progress. It may be best to bail out and
  4221       // let the foreground collector do its job.
  4222       // Clear _restart_addr, so that foreground GC
  4223       // works from scratch. This avoids the headache of
  4224       // a "rescan" which would otherwise be needed because
  4225       // of the dirty mod union table & card table.
  4226       _restart_addr = NULL;
  4227       return false;  // indicating failure to complete marking
  4229     // Deal with stack overflow:
  4230     // we restart marking from _restart_addr
  4231     HeapWord* ra = _restart_addr;
  4232     markFromRootsClosure.reset(ra);
  4233     _restart_addr = NULL;
  4234     _markBitMap.iterate(&markFromRootsClosure, ra, _span.end());
  4236   return true;
  4239 void CMSCollector::preclean() {
  4240   check_correct_thread_executing();
  4241   assert(Thread::current()->is_ConcurrentGC_thread(), "Wrong thread");
  4242   verify_work_stacks_empty();
  4243   verify_overflow_empty();
  4244   _abort_preclean = false;
  4245   if (CMSPrecleaningEnabled) {
  4246     _eden_chunk_index = 0;
  4247     size_t used = get_eden_used();
  4248     size_t capacity = get_eden_capacity();
  4249     // Don't start sampling unless we will get sufficiently
  4250     // many samples.
  4251     if (used < (capacity/(CMSScheduleRemarkSamplingRatio * 100)
  4252                 * CMSScheduleRemarkEdenPenetration)) {
  4253       _start_sampling = true;
  4254     } else {
  4255       _start_sampling = false;
  4257     TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty);
  4258     CMSPhaseAccounting pa(this, "preclean", !PrintGCDetails);
  4259     preclean_work(CMSPrecleanRefLists1, CMSPrecleanSurvivors1);
  4261   CMSTokenSync x(true); // is cms thread
  4262   if (CMSPrecleaningEnabled) {
  4263     sample_eden();
  4264     _collectorState = AbortablePreclean;
  4265   } else {
  4266     _collectorState = FinalMarking;
  4268   verify_work_stacks_empty();
  4269   verify_overflow_empty();
  4272 // Try and schedule the remark such that young gen
  4273 // occupancy is CMSScheduleRemarkEdenPenetration %.
  4274 void CMSCollector::abortable_preclean() {
  4275   check_correct_thread_executing();
  4276   assert(CMSPrecleaningEnabled,  "Inconsistent control state");
  4277   assert(_collectorState == AbortablePreclean, "Inconsistent control state");
  4279   // If Eden's current occupancy is below this threshold,
  4280   // immediately schedule the remark; else preclean
  4281   // past the next scavenge in an effort to
  4282   // schedule the pause as described avove. By choosing
  4283   // CMSScheduleRemarkEdenSizeThreshold >= max eden size
  4284   // we will never do an actual abortable preclean cycle.
  4285   if (get_eden_used() > CMSScheduleRemarkEdenSizeThreshold) {
  4286     TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty);
  4287     CMSPhaseAccounting pa(this, "abortable-preclean", !PrintGCDetails);
  4288     // We need more smarts in the abortable preclean
  4289     // loop below to deal with cases where allocation
  4290     // in young gen is very very slow, and our precleaning
  4291     // is running a losing race against a horde of
  4292     // mutators intent on flooding us with CMS updates
  4293     // (dirty cards).
  4294     // One, admittedly dumb, strategy is to give up
  4295     // after a certain number of abortable precleaning loops
  4296     // or after a certain maximum time. We want to make
  4297     // this smarter in the next iteration.
  4298     // XXX FIX ME!!! YSR
  4299     size_t loops = 0, workdone = 0, cumworkdone = 0, waited = 0;
  4300     while (!(should_abort_preclean() ||
  4301              ConcurrentMarkSweepThread::should_terminate())) {
  4302       workdone = preclean_work(CMSPrecleanRefLists2, CMSPrecleanSurvivors2);
  4303       cumworkdone += workdone;
  4304       loops++;
  4305       // Voluntarily terminate abortable preclean phase if we have
  4306       // been at it for too long.
  4307       if ((CMSMaxAbortablePrecleanLoops != 0) &&
  4308           loops >= CMSMaxAbortablePrecleanLoops) {
  4309         if (PrintGCDetails) {
  4310           gclog_or_tty->print(" CMS: abort preclean due to loops ");
  4312         break;
  4314       if (pa.wallclock_millis() > CMSMaxAbortablePrecleanTime) {
  4315         if (PrintGCDetails) {
  4316           gclog_or_tty->print(" CMS: abort preclean due to time ");
  4318         break;
  4320       // If we are doing little work each iteration, we should
  4321       // take a short break.
  4322       if (workdone < CMSAbortablePrecleanMinWorkPerIteration) {
  4323         // Sleep for some time, waiting for work to accumulate
  4324         stopTimer();
  4325         cmsThread()->wait_on_cms_lock(CMSAbortablePrecleanWaitMillis);
  4326         startTimer();
  4327         waited++;
  4330     if (PrintCMSStatistics > 0) {
  4331       gclog_or_tty->print(" [%d iterations, %d waits, %d cards)] ",
  4332                           loops, waited, cumworkdone);
  4335   CMSTokenSync x(true); // is cms thread
  4336   if (_collectorState != Idling) {
  4337     assert(_collectorState == AbortablePreclean,
  4338            "Spontaneous state transition?");
  4339     _collectorState = FinalMarking;
  4340   } // Else, a foreground collection completed this CMS cycle.
  4341   return;
  4344 // Respond to an Eden sampling opportunity
  4345 void CMSCollector::sample_eden() {
  4346   // Make sure a young gc cannot sneak in between our
  4347   // reading and recording of a sample.
  4348   assert(Thread::current()->is_ConcurrentGC_thread(),
  4349          "Only the cms thread may collect Eden samples");
  4350   assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  4351          "Should collect samples while holding CMS token");
  4352   if (!_start_sampling) {
  4353     return;
  4355   if (_eden_chunk_array) {
  4356     if (_eden_chunk_index < _eden_chunk_capacity) {
  4357       _eden_chunk_array[_eden_chunk_index] = *_top_addr;   // take sample
  4358       assert(_eden_chunk_array[_eden_chunk_index] <= *_end_addr,
  4359              "Unexpected state of Eden");
  4360       // We'd like to check that what we just sampled is an oop-start address;
  4361       // however, we cannot do that here since the object may not yet have been
  4362       // initialized. So we'll instead do the check when we _use_ this sample
  4363       // later.
  4364       if (_eden_chunk_index == 0 ||
  4365           (pointer_delta(_eden_chunk_array[_eden_chunk_index],
  4366                          _eden_chunk_array[_eden_chunk_index-1])
  4367            >= CMSSamplingGrain)) {
  4368         _eden_chunk_index++;  // commit sample
  4372   if ((_collectorState == AbortablePreclean) && !_abort_preclean) {
  4373     size_t used = get_eden_used();
  4374     size_t capacity = get_eden_capacity();
  4375     assert(used <= capacity, "Unexpected state of Eden");
  4376     if (used >  (capacity/100 * CMSScheduleRemarkEdenPenetration)) {
  4377       _abort_preclean = true;
  4383 size_t CMSCollector::preclean_work(bool clean_refs, bool clean_survivor) {
  4384   assert(_collectorState == Precleaning ||
  4385          _collectorState == AbortablePreclean, "incorrect state");
  4386   ResourceMark rm;
  4387   HandleMark   hm;
  4388   // Do one pass of scrubbing the discovered reference lists
  4389   // to remove any reference objects with strongly-reachable
  4390   // referents.
  4391   if (clean_refs) {
  4392     ReferenceProcessor* rp = ref_processor();
  4393     CMSPrecleanRefsYieldClosure yield_cl(this);
  4394     assert(rp->span().equals(_span), "Spans should be equal");
  4395     CMSKeepAliveClosure keep_alive(this, _span, &_markBitMap,
  4396                                    &_markStack, true /* preclean */);
  4397     CMSDrainMarkingStackClosure complete_trace(this,
  4398                                    _span, &_markBitMap, &_markStack,
  4399                                    &keep_alive, true /* preclean */);
  4401     // We don't want this step to interfere with a young
  4402     // collection because we don't want to take CPU
  4403     // or memory bandwidth away from the young GC threads
  4404     // (which may be as many as there are CPUs).
  4405     // Note that we don't need to protect ourselves from
  4406     // interference with mutators because they can't
  4407     // manipulate the discovered reference lists nor affect
  4408     // the computed reachability of the referents, the
  4409     // only properties manipulated by the precleaning
  4410     // of these reference lists.
  4411     stopTimer();
  4412     CMSTokenSyncWithLocks x(true /* is cms thread */,
  4413                             bitMapLock());
  4414     startTimer();
  4415     sample_eden();
  4416     // The following will yield to allow foreground
  4417     // collection to proceed promptly. XXX YSR:
  4418     // The code in this method may need further
  4419     // tweaking for better performance and some restructuring
  4420     // for cleaner interfaces.
  4421     rp->preclean_discovered_references(
  4422           rp->is_alive_non_header(), &keep_alive, &complete_trace,
  4423           &yield_cl);
  4426   if (clean_survivor) {  // preclean the active survivor space(s)
  4427     assert(_young_gen->kind() == Generation::DefNew ||
  4428            _young_gen->kind() == Generation::ParNew ||
  4429            _young_gen->kind() == Generation::ASParNew,
  4430          "incorrect type for cast");
  4431     DefNewGeneration* dng = (DefNewGeneration*)_young_gen;
  4432     PushAndMarkClosure pam_cl(this, _span, ref_processor(),
  4433                              &_markBitMap, &_modUnionTable,
  4434                              &_markStack, &_revisitStack,
  4435                              true /* precleaning phase */);
  4436     stopTimer();
  4437     CMSTokenSyncWithLocks ts(true /* is cms thread */,
  4438                              bitMapLock());
  4439     startTimer();
  4440     unsigned int before_count =
  4441       GenCollectedHeap::heap()->total_collections();
  4442     SurvivorSpacePrecleanClosure
  4443       sss_cl(this, _span, &_markBitMap, &_markStack,
  4444              &pam_cl, before_count, CMSYield);
  4445     dng->from()->object_iterate_careful(&sss_cl);
  4446     dng->to()->object_iterate_careful(&sss_cl);
  4448   MarkRefsIntoAndScanClosure
  4449     mrias_cl(_span, ref_processor(), &_markBitMap, &_modUnionTable,
  4450              &_markStack, &_revisitStack, this, CMSYield,
  4451              true /* precleaning phase */);
  4452   // CAUTION: The following closure has persistent state that may need to
  4453   // be reset upon a decrease in the sequence of addresses it
  4454   // processes.
  4455   ScanMarkedObjectsAgainCarefullyClosure
  4456     smoac_cl(this, _span,
  4457       &_markBitMap, &_markStack, &_revisitStack, &mrias_cl, CMSYield);
  4459   // Preclean dirty cards in ModUnionTable and CardTable using
  4460   // appropriate convergence criterion;
  4461   // repeat CMSPrecleanIter times unless we find that
  4462   // we are losing.
  4463   assert(CMSPrecleanIter < 10, "CMSPrecleanIter is too large");
  4464   assert(CMSPrecleanNumerator < CMSPrecleanDenominator,
  4465          "Bad convergence multiplier");
  4466   assert(CMSPrecleanThreshold >= 100,
  4467          "Unreasonably low CMSPrecleanThreshold");
  4469   size_t numIter, cumNumCards, lastNumCards, curNumCards;
  4470   for (numIter = 0, cumNumCards = lastNumCards = curNumCards = 0;
  4471        numIter < CMSPrecleanIter;
  4472        numIter++, lastNumCards = curNumCards, cumNumCards += curNumCards) {
  4473     curNumCards  = preclean_mod_union_table(_cmsGen, &smoac_cl);
  4474     if (CMSPermGenPrecleaningEnabled) {
  4475       curNumCards  += preclean_mod_union_table(_permGen, &smoac_cl);
  4477     if (Verbose && PrintGCDetails) {
  4478       gclog_or_tty->print(" (modUnionTable: %d cards)", curNumCards);
  4480     // Either there are very few dirty cards, so re-mark
  4481     // pause will be small anyway, or our pre-cleaning isn't
  4482     // that much faster than the rate at which cards are being
  4483     // dirtied, so we might as well stop and re-mark since
  4484     // precleaning won't improve our re-mark time by much.
  4485     if (curNumCards <= CMSPrecleanThreshold ||
  4486         (numIter > 0 &&
  4487          (curNumCards * CMSPrecleanDenominator >
  4488          lastNumCards * CMSPrecleanNumerator))) {
  4489       numIter++;
  4490       cumNumCards += curNumCards;
  4491       break;
  4494   curNumCards = preclean_card_table(_cmsGen, &smoac_cl);
  4495   if (CMSPermGenPrecleaningEnabled) {
  4496     curNumCards += preclean_card_table(_permGen, &smoac_cl);
  4498   cumNumCards += curNumCards;
  4499   if (PrintGCDetails && PrintCMSStatistics != 0) {
  4500     gclog_or_tty->print_cr(" (cardTable: %d cards, re-scanned %d cards, %d iterations)",
  4501                   curNumCards, cumNumCards, numIter);
  4503   return cumNumCards;   // as a measure of useful work done
  4506 // PRECLEANING NOTES:
  4507 // Precleaning involves:
  4508 // . reading the bits of the modUnionTable and clearing the set bits.
  4509 // . For the cards corresponding to the set bits, we scan the
  4510 //   objects on those cards. This means we need the free_list_lock
  4511 //   so that we can safely iterate over the CMS space when scanning
  4512 //   for oops.
  4513 // . When we scan the objects, we'll be both reading and setting
  4514 //   marks in the marking bit map, so we'll need the marking bit map.
  4515 // . For protecting _collector_state transitions, we take the CGC_lock.
  4516 //   Note that any races in the reading of of card table entries by the
  4517 //   CMS thread on the one hand and the clearing of those entries by the
  4518 //   VM thread or the setting of those entries by the mutator threads on the
  4519 //   other are quite benign. However, for efficiency it makes sense to keep
  4520 //   the VM thread from racing with the CMS thread while the latter is
  4521 //   dirty card info to the modUnionTable. We therefore also use the
  4522 //   CGC_lock to protect the reading of the card table and the mod union
  4523 //   table by the CM thread.
  4524 // . We run concurrently with mutator updates, so scanning
  4525 //   needs to be done carefully  -- we should not try to scan
  4526 //   potentially uninitialized objects.
  4527 //
  4528 // Locking strategy: While holding the CGC_lock, we scan over and
  4529 // reset a maximal dirty range of the mod union / card tables, then lock
  4530 // the free_list_lock and bitmap lock to do a full marking, then
  4531 // release these locks; and repeat the cycle. This allows for a
  4532 // certain amount of fairness in the sharing of these locks between
  4533 // the CMS collector on the one hand, and the VM thread and the
  4534 // mutators on the other.
  4536 // NOTE: preclean_mod_union_table() and preclean_card_table()
  4537 // further below are largely identical; if you need to modify
  4538 // one of these methods, please check the other method too.
  4540 size_t CMSCollector::preclean_mod_union_table(
  4541   ConcurrentMarkSweepGeneration* gen,
  4542   ScanMarkedObjectsAgainCarefullyClosure* cl) {
  4543   verify_work_stacks_empty();
  4544   verify_overflow_empty();
  4546   // strategy: starting with the first card, accumulate contiguous
  4547   // ranges of dirty cards; clear these cards, then scan the region
  4548   // covered by these cards.
  4550   // Since all of the MUT is committed ahead, we can just use
  4551   // that, in case the generations expand while we are precleaning.
  4552   // It might also be fine to just use the committed part of the
  4553   // generation, but we might potentially miss cards when the
  4554   // generation is rapidly expanding while we are in the midst
  4555   // of precleaning.
  4556   HeapWord* startAddr = gen->reserved().start();
  4557   HeapWord* endAddr   = gen->reserved().end();
  4559   cl->setFreelistLock(gen->freelistLock());   // needed for yielding
  4561   size_t numDirtyCards, cumNumDirtyCards;
  4562   HeapWord *nextAddr, *lastAddr;
  4563   for (cumNumDirtyCards = numDirtyCards = 0,
  4564        nextAddr = lastAddr = startAddr;
  4565        nextAddr < endAddr;
  4566        nextAddr = lastAddr, cumNumDirtyCards += numDirtyCards) {
  4568     ResourceMark rm;
  4569     HandleMark   hm;
  4571     MemRegion dirtyRegion;
  4573       stopTimer();
  4574       CMSTokenSync ts(true);
  4575       startTimer();
  4576       sample_eden();
  4577       // Get dirty region starting at nextOffset (inclusive),
  4578       // simultaneously clearing it.
  4579       dirtyRegion =
  4580         _modUnionTable.getAndClearMarkedRegion(nextAddr, endAddr);
  4581       assert(dirtyRegion.start() >= nextAddr,
  4582              "returned region inconsistent?");
  4584     // Remember where the next search should begin.
  4585     // The returned region (if non-empty) is a right open interval,
  4586     // so lastOffset is obtained from the right end of that
  4587     // interval.
  4588     lastAddr = dirtyRegion.end();
  4589     // Should do something more transparent and less hacky XXX
  4590     numDirtyCards =
  4591       _modUnionTable.heapWordDiffToOffsetDiff(dirtyRegion.word_size());
  4593     // We'll scan the cards in the dirty region (with periodic
  4594     // yields for foreground GC as needed).
  4595     if (!dirtyRegion.is_empty()) {
  4596       assert(numDirtyCards > 0, "consistency check");
  4597       HeapWord* stop_point = NULL;
  4598       stopTimer();
  4599       CMSTokenSyncWithLocks ts(true, gen->freelistLock(),
  4600                                bitMapLock());
  4601       startTimer();
  4603         verify_work_stacks_empty();
  4604         verify_overflow_empty();
  4605         sample_eden();
  4606         stop_point =
  4607           gen->cmsSpace()->object_iterate_careful_m(dirtyRegion, cl);
  4609       if (stop_point != NULL) {
  4610         // The careful iteration stopped early either because it found an
  4611         // uninitialized object, or because we were in the midst of an
  4612         // "abortable preclean", which should now be aborted. Redirty
  4613         // the bits corresponding to the partially-scanned or unscanned
  4614         // cards. We'll either restart at the next block boundary or
  4615         // abort the preclean.
  4616         assert((CMSPermGenPrecleaningEnabled && (gen == _permGen)) ||
  4617                (_collectorState == AbortablePreclean && should_abort_preclean()),
  4618                "Unparsable objects should only be in perm gen.");
  4619         _modUnionTable.mark_range(MemRegion(stop_point, dirtyRegion.end()));
  4620         if (should_abort_preclean()) {
  4621           break; // out of preclean loop
  4622         } else {
  4623           // Compute the next address at which preclean should pick up;
  4624           // might need bitMapLock in order to read P-bits.
  4625           lastAddr = next_card_start_after_block(stop_point);
  4628     } else {
  4629       assert(lastAddr == endAddr, "consistency check");
  4630       assert(numDirtyCards == 0, "consistency check");
  4631       break;
  4634   verify_work_stacks_empty();
  4635   verify_overflow_empty();
  4636   return cumNumDirtyCards;
  4639 // NOTE: preclean_mod_union_table() above and preclean_card_table()
  4640 // below are largely identical; if you need to modify
  4641 // one of these methods, please check the other method too.
  4643 size_t CMSCollector::preclean_card_table(ConcurrentMarkSweepGeneration* gen,
  4644   ScanMarkedObjectsAgainCarefullyClosure* cl) {
  4645   // strategy: it's similar to precleamModUnionTable above, in that
  4646   // we accumulate contiguous ranges of dirty cards, mark these cards
  4647   // precleaned, then scan the region covered by these cards.
  4648   HeapWord* endAddr   = (HeapWord*)(gen->_virtual_space.high());
  4649   HeapWord* startAddr = (HeapWord*)(gen->_virtual_space.low());
  4651   cl->setFreelistLock(gen->freelistLock());   // needed for yielding
  4653   size_t numDirtyCards, cumNumDirtyCards;
  4654   HeapWord *lastAddr, *nextAddr;
  4656   for (cumNumDirtyCards = numDirtyCards = 0,
  4657        nextAddr = lastAddr = startAddr;
  4658        nextAddr < endAddr;
  4659        nextAddr = lastAddr, cumNumDirtyCards += numDirtyCards) {
  4661     ResourceMark rm;
  4662     HandleMark   hm;
  4664     MemRegion dirtyRegion;
  4666       // See comments in "Precleaning notes" above on why we
  4667       // do this locking. XXX Could the locking overheads be
  4668       // too high when dirty cards are sparse? [I don't think so.]
  4669       stopTimer();
  4670       CMSTokenSync x(true); // is cms thread
  4671       startTimer();
  4672       sample_eden();
  4673       // Get and clear dirty region from card table
  4674       dirtyRegion = _ct->ct_bs()->dirty_card_range_after_reset(
  4675                                     MemRegion(nextAddr, endAddr),
  4676                                     true,
  4677                                     CardTableModRefBS::precleaned_card_val());
  4679       assert(dirtyRegion.start() >= nextAddr,
  4680              "returned region inconsistent?");
  4682     lastAddr = dirtyRegion.end();
  4683     numDirtyCards =
  4684       dirtyRegion.word_size()/CardTableModRefBS::card_size_in_words;
  4686     if (!dirtyRegion.is_empty()) {
  4687       stopTimer();
  4688       CMSTokenSyncWithLocks ts(true, gen->freelistLock(), bitMapLock());
  4689       startTimer();
  4690       sample_eden();
  4691       verify_work_stacks_empty();
  4692       verify_overflow_empty();
  4693       HeapWord* stop_point =
  4694         gen->cmsSpace()->object_iterate_careful_m(dirtyRegion, cl);
  4695       if (stop_point != NULL) {
  4696         // The careful iteration stopped early because it found an
  4697         // uninitialized object.  Redirty the bits corresponding to the
  4698         // partially-scanned or unscanned cards, and start again at the
  4699         // next block boundary.
  4700         assert(CMSPermGenPrecleaningEnabled ||
  4701                (_collectorState == AbortablePreclean && should_abort_preclean()),
  4702                "Unparsable objects should only be in perm gen.");
  4703         _ct->ct_bs()->invalidate(MemRegion(stop_point, dirtyRegion.end()));
  4704         if (should_abort_preclean()) {
  4705           break; // out of preclean loop
  4706         } else {
  4707           // Compute the next address at which preclean should pick up.
  4708           lastAddr = next_card_start_after_block(stop_point);
  4711     } else {
  4712       break;
  4715   verify_work_stacks_empty();
  4716   verify_overflow_empty();
  4717   return cumNumDirtyCards;
  4720 void CMSCollector::checkpointRootsFinal(bool asynch,
  4721   bool clear_all_soft_refs, bool init_mark_was_synchronous) {
  4722   assert(_collectorState == FinalMarking, "incorrect state transition?");
  4723   check_correct_thread_executing();
  4724   // world is stopped at this checkpoint
  4725   assert(SafepointSynchronize::is_at_safepoint(),
  4726          "world should be stopped");
  4727   verify_work_stacks_empty();
  4728   verify_overflow_empty();
  4730   SpecializationStats::clear();
  4731   if (PrintGCDetails) {
  4732     gclog_or_tty->print("[YG occupancy: "SIZE_FORMAT" K ("SIZE_FORMAT" K)]",
  4733                         _young_gen->used() / K,
  4734                         _young_gen->capacity() / K);
  4736   if (asynch) {
  4737     if (CMSScavengeBeforeRemark) {
  4738       GenCollectedHeap* gch = GenCollectedHeap::heap();
  4739       // Temporarily set flag to false, GCH->do_collection will
  4740       // expect it to be false and set to true
  4741       FlagSetting fl(gch->_is_gc_active, false);
  4742       NOT_PRODUCT(TraceTime t("Scavenge-Before-Remark",
  4743         PrintGCDetails && Verbose, true, gclog_or_tty);)
  4744       int level = _cmsGen->level() - 1;
  4745       if (level >= 0) {
  4746         gch->do_collection(true,        // full (i.e. force, see below)
  4747                            false,       // !clear_all_soft_refs
  4748                            0,           // size
  4749                            false,       // is_tlab
  4750                            level        // max_level
  4751                           );
  4754     FreelistLocker x(this);
  4755     MutexLockerEx y(bitMapLock(),
  4756                     Mutex::_no_safepoint_check_flag);
  4757     assert(!init_mark_was_synchronous, "but that's impossible!");
  4758     checkpointRootsFinalWork(asynch, clear_all_soft_refs, false);
  4759   } else {
  4760     // already have all the locks
  4761     checkpointRootsFinalWork(asynch, clear_all_soft_refs,
  4762                              init_mark_was_synchronous);
  4764   verify_work_stacks_empty();
  4765   verify_overflow_empty();
  4766   SpecializationStats::print();
  4769 void CMSCollector::checkpointRootsFinalWork(bool asynch,
  4770   bool clear_all_soft_refs, bool init_mark_was_synchronous) {
  4772   NOT_PRODUCT(TraceTime tr("checkpointRootsFinalWork", PrintGCDetails, false, gclog_or_tty);)
  4774   assert(haveFreelistLocks(), "must have free list locks");
  4775   assert_lock_strong(bitMapLock());
  4777   if (UseAdaptiveSizePolicy) {
  4778     size_policy()->checkpoint_roots_final_begin();
  4781   ResourceMark rm;
  4782   HandleMark   hm;
  4784   GenCollectedHeap* gch = GenCollectedHeap::heap();
  4786   if (should_unload_classes()) {
  4787     CodeCache::gc_prologue();
  4789   assert(haveFreelistLocks(), "must have free list locks");
  4790   assert_lock_strong(bitMapLock());
  4792   if (!init_mark_was_synchronous) {
  4793     // We might assume that we need not fill TLAB's when
  4794     // CMSScavengeBeforeRemark is set, because we may have just done
  4795     // a scavenge which would have filled all TLAB's -- and besides
  4796     // Eden would be empty. This however may not always be the case --
  4797     // for instance although we asked for a scavenge, it may not have
  4798     // happened because of a JNI critical section. We probably need
  4799     // a policy for deciding whether we can in that case wait until
  4800     // the critical section releases and then do the remark following
  4801     // the scavenge, and skip it here. In the absence of that policy,
  4802     // or of an indication of whether the scavenge did indeed occur,
  4803     // we cannot rely on TLAB's having been filled and must do
  4804     // so here just in case a scavenge did not happen.
  4805     gch->ensure_parsability(false);  // fill TLAB's, but no need to retire them
  4806     // Update the saved marks which may affect the root scans.
  4807     gch->save_marks();
  4810       COMPILER2_PRESENT(DerivedPointerTableDeactivate dpt_deact;)
  4812       // Note on the role of the mod union table:
  4813       // Since the marker in "markFromRoots" marks concurrently with
  4814       // mutators, it is possible for some reachable objects not to have been
  4815       // scanned. For instance, an only reference to an object A was
  4816       // placed in object B after the marker scanned B. Unless B is rescanned,
  4817       // A would be collected. Such updates to references in marked objects
  4818       // are detected via the mod union table which is the set of all cards
  4819       // dirtied since the first checkpoint in this GC cycle and prior to
  4820       // the most recent young generation GC, minus those cleaned up by the
  4821       // concurrent precleaning.
  4822       if (CMSParallelRemarkEnabled && ParallelGCThreads > 0) {
  4823         TraceTime t("Rescan (parallel) ", PrintGCDetails, false, gclog_or_tty);
  4824         do_remark_parallel();
  4825       } else {
  4826         TraceTime t("Rescan (non-parallel) ", PrintGCDetails, false,
  4827                     gclog_or_tty);
  4828         do_remark_non_parallel();
  4831   } else {
  4832     assert(!asynch, "Can't have init_mark_was_synchronous in asynch mode");
  4833     // The initial mark was stop-world, so there's no rescanning to
  4834     // do; go straight on to the next step below.
  4836   verify_work_stacks_empty();
  4837   verify_overflow_empty();
  4840     NOT_PRODUCT(TraceTime ts("refProcessingWork", PrintGCDetails, false, gclog_or_tty);)
  4841     refProcessingWork(asynch, clear_all_soft_refs);
  4843   verify_work_stacks_empty();
  4844   verify_overflow_empty();
  4846   if (should_unload_classes()) {
  4847     CodeCache::gc_epilogue();
  4850   // If we encountered any (marking stack / work queue) overflow
  4851   // events during the current CMS cycle, take appropriate
  4852   // remedial measures, where possible, so as to try and avoid
  4853   // recurrence of that condition.
  4854   assert(_markStack.isEmpty(), "No grey objects");
  4855   size_t ser_ovflw = _ser_pmc_remark_ovflw + _ser_pmc_preclean_ovflw +
  4856                      _ser_kac_ovflw        + _ser_kac_preclean_ovflw;
  4857   if (ser_ovflw > 0) {
  4858     if (PrintCMSStatistics != 0) {
  4859       gclog_or_tty->print_cr("Marking stack overflow (benign) "
  4860         "(pmc_pc="SIZE_FORMAT", pmc_rm="SIZE_FORMAT", kac="SIZE_FORMAT
  4861         ", kac_preclean="SIZE_FORMAT")",
  4862         _ser_pmc_preclean_ovflw, _ser_pmc_remark_ovflw,
  4863         _ser_kac_ovflw, _ser_kac_preclean_ovflw);
  4865     _markStack.expand();
  4866     _ser_pmc_remark_ovflw = 0;
  4867     _ser_pmc_preclean_ovflw = 0;
  4868     _ser_kac_preclean_ovflw = 0;
  4869     _ser_kac_ovflw = 0;
  4871   if (_par_pmc_remark_ovflw > 0 || _par_kac_ovflw > 0) {
  4872     if (PrintCMSStatistics != 0) {
  4873       gclog_or_tty->print_cr("Work queue overflow (benign) "
  4874         "(pmc_rm="SIZE_FORMAT", kac="SIZE_FORMAT")",
  4875         _par_pmc_remark_ovflw, _par_kac_ovflw);
  4877     _par_pmc_remark_ovflw = 0;
  4878     _par_kac_ovflw = 0;
  4880   if (PrintCMSStatistics != 0) {
  4881      if (_markStack._hit_limit > 0) {
  4882        gclog_or_tty->print_cr(" (benign) Hit max stack size limit ("SIZE_FORMAT")",
  4883                               _markStack._hit_limit);
  4885      if (_markStack._failed_double > 0) {
  4886        gclog_or_tty->print_cr(" (benign) Failed stack doubling ("SIZE_FORMAT"),"
  4887                               " current capacity "SIZE_FORMAT,
  4888                               _markStack._failed_double,
  4889                               _markStack.capacity());
  4892   _markStack._hit_limit = 0;
  4893   _markStack._failed_double = 0;
  4895   if ((VerifyAfterGC || VerifyDuringGC) &&
  4896       GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) {
  4897     verify_after_remark();
  4900   // Change under the freelistLocks.
  4901   _collectorState = Sweeping;
  4902   // Call isAllClear() under bitMapLock
  4903   assert(_modUnionTable.isAllClear(), "Should be clear by end of the"
  4904     " final marking");
  4905   if (UseAdaptiveSizePolicy) {
  4906     size_policy()->checkpoint_roots_final_end(gch->gc_cause());
  4910 // Parallel remark task
  4911 class CMSParRemarkTask: public AbstractGangTask {
  4912   CMSCollector* _collector;
  4913   WorkGang*     _workers;
  4914   int           _n_workers;
  4915   CompactibleFreeListSpace* _cms_space;
  4916   CompactibleFreeListSpace* _perm_space;
  4918   // The per-thread work queues, available here for stealing.
  4919   OopTaskQueueSet*       _task_queues;
  4920   ParallelTaskTerminator _term;
  4922  public:
  4923   CMSParRemarkTask(CMSCollector* collector,
  4924                    CompactibleFreeListSpace* cms_space,
  4925                    CompactibleFreeListSpace* perm_space,
  4926                    int n_workers, WorkGang* workers,
  4927                    OopTaskQueueSet* task_queues):
  4928     AbstractGangTask("Rescan roots and grey objects in parallel"),
  4929     _collector(collector),
  4930     _cms_space(cms_space), _perm_space(perm_space),
  4931     _n_workers(n_workers),
  4932     _workers(workers),
  4933     _task_queues(task_queues),
  4934     _term(workers->total_workers(), task_queues) { }
  4936   OopTaskQueueSet* task_queues() { return _task_queues; }
  4938   OopTaskQueue* work_queue(int i) { return task_queues()->queue(i); }
  4940   ParallelTaskTerminator* terminator() { return &_term; }
  4942   void work(int i);
  4944  private:
  4945   // Work method in support of parallel rescan ... of young gen spaces
  4946   void do_young_space_rescan(int i, Par_MarkRefsIntoAndScanClosure* cl,
  4947                              ContiguousSpace* space,
  4948                              HeapWord** chunk_array, size_t chunk_top);
  4950   // ... of  dirty cards in old space
  4951   void do_dirty_card_rescan_tasks(CompactibleFreeListSpace* sp, int i,
  4952                                   Par_MarkRefsIntoAndScanClosure* cl);
  4954   // ... work stealing for the above
  4955   void do_work_steal(int i, Par_MarkRefsIntoAndScanClosure* cl, int* seed);
  4956 };
  4958 void CMSParRemarkTask::work(int i) {
  4959   elapsedTimer _timer;
  4960   ResourceMark rm;
  4961   HandleMark   hm;
  4963   // ---------- rescan from roots --------------
  4964   _timer.start();
  4965   GenCollectedHeap* gch = GenCollectedHeap::heap();
  4966   Par_MarkRefsIntoAndScanClosure par_mrias_cl(_collector,
  4967     _collector->_span, _collector->ref_processor(),
  4968     &(_collector->_markBitMap),
  4969     work_queue(i), &(_collector->_revisitStack));
  4971   // Rescan young gen roots first since these are likely
  4972   // coarsely partitioned and may, on that account, constitute
  4973   // the critical path; thus, it's best to start off that
  4974   // work first.
  4975   // ---------- young gen roots --------------
  4977     DefNewGeneration* dng = _collector->_young_gen->as_DefNewGeneration();
  4978     EdenSpace* eden_space = dng->eden();
  4979     ContiguousSpace* from_space = dng->from();
  4980     ContiguousSpace* to_space   = dng->to();
  4982     HeapWord** eca = _collector->_eden_chunk_array;
  4983     size_t     ect = _collector->_eden_chunk_index;
  4984     HeapWord** sca = _collector->_survivor_chunk_array;
  4985     size_t     sct = _collector->_survivor_chunk_index;
  4987     assert(ect <= _collector->_eden_chunk_capacity, "out of bounds");
  4988     assert(sct <= _collector->_survivor_chunk_capacity, "out of bounds");
  4990     do_young_space_rescan(i, &par_mrias_cl, to_space, NULL, 0);
  4991     do_young_space_rescan(i, &par_mrias_cl, from_space, sca, sct);
  4992     do_young_space_rescan(i, &par_mrias_cl, eden_space, eca, ect);
  4994     _timer.stop();
  4995     if (PrintCMSStatistics != 0) {
  4996       gclog_or_tty->print_cr(
  4997         "Finished young gen rescan work in %dth thread: %3.3f sec",
  4998         i, _timer.seconds());
  5002   // ---------- remaining roots --------------
  5003   _timer.reset();
  5004   _timer.start();
  5005   gch->gen_process_strong_roots(_collector->_cmsGen->level(),
  5006                                 false,     // yg was scanned above
  5007                                 true,      // collecting perm gen
  5008                                 SharedHeap::ScanningOption(_collector->CMSCollector::roots_scanning_options()),
  5009                                 NULL, &par_mrias_cl);
  5010   _timer.stop();
  5011   if (PrintCMSStatistics != 0) {
  5012     gclog_or_tty->print_cr(
  5013       "Finished remaining root rescan work in %dth thread: %3.3f sec",
  5014       i, _timer.seconds());
  5017   // ---------- rescan dirty cards ------------
  5018   _timer.reset();
  5019   _timer.start();
  5021   // Do the rescan tasks for each of the two spaces
  5022   // (cms_space and perm_space) in turn.
  5023   do_dirty_card_rescan_tasks(_cms_space, i, &par_mrias_cl);
  5024   do_dirty_card_rescan_tasks(_perm_space, i, &par_mrias_cl);
  5025   _timer.stop();
  5026   if (PrintCMSStatistics != 0) {
  5027     gclog_or_tty->print_cr(
  5028       "Finished dirty card rescan work in %dth thread: %3.3f sec",
  5029       i, _timer.seconds());
  5032   // ---------- steal work from other threads ...
  5033   // ---------- ... and drain overflow list.
  5034   _timer.reset();
  5035   _timer.start();
  5036   do_work_steal(i, &par_mrias_cl, _collector->hash_seed(i));
  5037   _timer.stop();
  5038   if (PrintCMSStatistics != 0) {
  5039     gclog_or_tty->print_cr(
  5040       "Finished work stealing in %dth thread: %3.3f sec",
  5041       i, _timer.seconds());
  5045 void
  5046 CMSParRemarkTask::do_young_space_rescan(int i,
  5047   Par_MarkRefsIntoAndScanClosure* cl, ContiguousSpace* space,
  5048   HeapWord** chunk_array, size_t chunk_top) {
  5049   // Until all tasks completed:
  5050   // . claim an unclaimed task
  5051   // . compute region boundaries corresponding to task claimed
  5052   //   using chunk_array
  5053   // . par_oop_iterate(cl) over that region
  5055   ResourceMark rm;
  5056   HandleMark   hm;
  5058   SequentialSubTasksDone* pst = space->par_seq_tasks();
  5059   assert(pst->valid(), "Uninitialized use?");
  5061   int nth_task = 0;
  5062   int n_tasks  = pst->n_tasks();
  5064   HeapWord *start, *end;
  5065   while (!pst->is_task_claimed(/* reference */ nth_task)) {
  5066     // We claimed task # nth_task; compute its boundaries.
  5067     if (chunk_top == 0) {  // no samples were taken
  5068       assert(nth_task == 0 && n_tasks == 1, "Can have only 1 EdenSpace task");
  5069       start = space->bottom();
  5070       end   = space->top();
  5071     } else if (nth_task == 0) {
  5072       start = space->bottom();
  5073       end   = chunk_array[nth_task];
  5074     } else if (nth_task < (jint)chunk_top) {
  5075       assert(nth_task >= 1, "Control point invariant");
  5076       start = chunk_array[nth_task - 1];
  5077       end   = chunk_array[nth_task];
  5078     } else {
  5079       assert(nth_task == (jint)chunk_top, "Control point invariant");
  5080       start = chunk_array[chunk_top - 1];
  5081       end   = space->top();
  5083     MemRegion mr(start, end);
  5084     // Verify that mr is in space
  5085     assert(mr.is_empty() || space->used_region().contains(mr),
  5086            "Should be in space");
  5087     // Verify that "start" is an object boundary
  5088     assert(mr.is_empty() || oop(mr.start())->is_oop(),
  5089            "Should be an oop");
  5090     space->par_oop_iterate(mr, cl);
  5092   pst->all_tasks_completed();
  5095 void
  5096 CMSParRemarkTask::do_dirty_card_rescan_tasks(
  5097   CompactibleFreeListSpace* sp, int i,
  5098   Par_MarkRefsIntoAndScanClosure* cl) {
  5099   // Until all tasks completed:
  5100   // . claim an unclaimed task
  5101   // . compute region boundaries corresponding to task claimed
  5102   // . transfer dirty bits ct->mut for that region
  5103   // . apply rescanclosure to dirty mut bits for that region
  5105   ResourceMark rm;
  5106   HandleMark   hm;
  5108   OopTaskQueue* work_q = work_queue(i);
  5109   ModUnionClosure modUnionClosure(&(_collector->_modUnionTable));
  5110   // CAUTION! CAUTION! CAUTION! CAUTION! CAUTION! CAUTION! CAUTION!
  5111   // CAUTION: This closure has state that persists across calls to
  5112   // the work method dirty_range_iterate_clear() in that it has
  5113   // imbedded in it a (subtype of) UpwardsObjectClosure. The
  5114   // use of that state in the imbedded UpwardsObjectClosure instance
  5115   // assumes that the cards are always iterated (even if in parallel
  5116   // by several threads) in monotonically increasing order per each
  5117   // thread. This is true of the implementation below which picks
  5118   // card ranges (chunks) in monotonically increasing order globally
  5119   // and, a-fortiori, in monotonically increasing order per thread
  5120   // (the latter order being a subsequence of the former).
  5121   // If the work code below is ever reorganized into a more chaotic
  5122   // work-partitioning form than the current "sequential tasks"
  5123   // paradigm, the use of that persistent state will have to be
  5124   // revisited and modified appropriately. See also related
  5125   // bug 4756801 work on which should examine this code to make
  5126   // sure that the changes there do not run counter to the
  5127   // assumptions made here and necessary for correctness and
  5128   // efficiency. Note also that this code might yield inefficient
  5129   // behaviour in the case of very large objects that span one or
  5130   // more work chunks. Such objects would potentially be scanned
  5131   // several times redundantly. Work on 4756801 should try and
  5132   // address that performance anomaly if at all possible. XXX
  5133   MemRegion  full_span  = _collector->_span;
  5134   CMSBitMap* bm    = &(_collector->_markBitMap);     // shared
  5135   CMSMarkStack* rs = &(_collector->_revisitStack);   // shared
  5136   MarkFromDirtyCardsClosure
  5137     greyRescanClosure(_collector, full_span, // entire span of interest
  5138                       sp, bm, work_q, rs, cl);
  5140   SequentialSubTasksDone* pst = sp->conc_par_seq_tasks();
  5141   assert(pst->valid(), "Uninitialized use?");
  5142   int nth_task = 0;
  5143   const int alignment = CardTableModRefBS::card_size * BitsPerWord;
  5144   MemRegion span = sp->used_region();
  5145   HeapWord* start_addr = span.start();
  5146   HeapWord* end_addr = (HeapWord*)round_to((intptr_t)span.end(),
  5147                                            alignment);
  5148   const size_t chunk_size = sp->rescan_task_size(); // in HeapWord units
  5149   assert((HeapWord*)round_to((intptr_t)start_addr, alignment) ==
  5150          start_addr, "Check alignment");
  5151   assert((size_t)round_to((intptr_t)chunk_size, alignment) ==
  5152          chunk_size, "Check alignment");
  5154   while (!pst->is_task_claimed(/* reference */ nth_task)) {
  5155     // Having claimed the nth_task, compute corresponding mem-region,
  5156     // which is a-fortiori aligned correctly (i.e. at a MUT bopundary).
  5157     // The alignment restriction ensures that we do not need any
  5158     // synchronization with other gang-workers while setting or
  5159     // clearing bits in thus chunk of the MUT.
  5160     MemRegion this_span = MemRegion(start_addr + nth_task*chunk_size,
  5161                                     start_addr + (nth_task+1)*chunk_size);
  5162     // The last chunk's end might be way beyond end of the
  5163     // used region. In that case pull back appropriately.
  5164     if (this_span.end() > end_addr) {
  5165       this_span.set_end(end_addr);
  5166       assert(!this_span.is_empty(), "Program logic (calculation of n_tasks)");
  5168     // Iterate over the dirty cards covering this chunk, marking them
  5169     // precleaned, and setting the corresponding bits in the mod union
  5170     // table. Since we have been careful to partition at Card and MUT-word
  5171     // boundaries no synchronization is needed between parallel threads.
  5172     _collector->_ct->ct_bs()->dirty_card_iterate(this_span,
  5173                                                  &modUnionClosure);
  5175     // Having transferred these marks into the modUnionTable,
  5176     // rescan the marked objects on the dirty cards in the modUnionTable.
  5177     // Even if this is at a synchronous collection, the initial marking
  5178     // may have been done during an asynchronous collection so there
  5179     // may be dirty bits in the mod-union table.
  5180     _collector->_modUnionTable.dirty_range_iterate_clear(
  5181                   this_span, &greyRescanClosure);
  5182     _collector->_modUnionTable.verifyNoOneBitsInRange(
  5183                                  this_span.start(),
  5184                                  this_span.end());
  5186   pst->all_tasks_completed();  // declare that i am done
  5189 // . see if we can share work_queues with ParNew? XXX
  5190 void
  5191 CMSParRemarkTask::do_work_steal(int i, Par_MarkRefsIntoAndScanClosure* cl,
  5192                                 int* seed) {
  5193   OopTaskQueue* work_q = work_queue(i);
  5194   NOT_PRODUCT(int num_steals = 0;)
  5195   oop obj_to_scan;
  5196   CMSBitMap* bm = &(_collector->_markBitMap);
  5197   size_t num_from_overflow_list =
  5198            MIN2((size_t)work_q->max_elems()/4,
  5199                 (size_t)ParGCDesiredObjsFromOverflowList);
  5201   while (true) {
  5202     // Completely finish any left over work from (an) earlier round(s)
  5203     cl->trim_queue(0);
  5204     // Now check if there's any work in the overflow list
  5205     if (_collector->par_take_from_overflow_list(num_from_overflow_list,
  5206                                                 work_q)) {
  5207       // found something in global overflow list;
  5208       // not yet ready to go stealing work from others.
  5209       // We'd like to assert(work_q->size() != 0, ...)
  5210       // because we just took work from the overflow list,
  5211       // but of course we can't since all of that could have
  5212       // been already stolen from us.
  5213       // "He giveth and He taketh away."
  5214       continue;
  5216     // Verify that we have no work before we resort to stealing
  5217     assert(work_q->size() == 0, "Have work, shouldn't steal");
  5218     // Try to steal from other queues that have work
  5219     if (task_queues()->steal(i, seed, /* reference */ obj_to_scan)) {
  5220       NOT_PRODUCT(num_steals++;)
  5221       assert(obj_to_scan->is_oop(), "Oops, not an oop!");
  5222       assert(bm->isMarked((HeapWord*)obj_to_scan), "Stole an unmarked oop?");
  5223       // Do scanning work
  5224       obj_to_scan->oop_iterate(cl);
  5225       // Loop around, finish this work, and try to steal some more
  5226     } else if (terminator()->offer_termination()) {
  5227         break;  // nirvana from the infinite cycle
  5230   NOT_PRODUCT(
  5231     if (PrintCMSStatistics != 0) {
  5232       gclog_or_tty->print("\n\t(%d: stole %d oops)", i, num_steals);
  5235   assert(work_q->size() == 0 && _collector->overflow_list_is_empty(),
  5236          "Else our work is not yet done");
  5239 // Return a thread-local PLAB recording array, as appropriate.
  5240 void* CMSCollector::get_data_recorder(int thr_num) {
  5241   if (_survivor_plab_array != NULL &&
  5242       (CMSPLABRecordAlways ||
  5243        (_collectorState > Marking && _collectorState < FinalMarking))) {
  5244     assert(thr_num < (int)ParallelGCThreads, "thr_num is out of bounds");
  5245     ChunkArray* ca = &_survivor_plab_array[thr_num];
  5246     ca->reset();   // clear it so that fresh data is recorded
  5247     return (void*) ca;
  5248   } else {
  5249     return NULL;
  5253 // Reset all the thread-local PLAB recording arrays
  5254 void CMSCollector::reset_survivor_plab_arrays() {
  5255   for (uint i = 0; i < ParallelGCThreads; i++) {
  5256     _survivor_plab_array[i].reset();
  5260 // Merge the per-thread plab arrays into the global survivor chunk
  5261 // array which will provide the partitioning of the survivor space
  5262 // for CMS rescan.
  5263 void CMSCollector::merge_survivor_plab_arrays(ContiguousSpace* surv) {
  5264   assert(_survivor_plab_array  != NULL, "Error");
  5265   assert(_survivor_chunk_array != NULL, "Error");
  5266   assert(_collectorState == FinalMarking, "Error");
  5267   for (uint j = 0; j < ParallelGCThreads; j++) {
  5268     _cursor[j] = 0;
  5270   HeapWord* top = surv->top();
  5271   size_t i;
  5272   for (i = 0; i < _survivor_chunk_capacity; i++) {  // all sca entries
  5273     HeapWord* min_val = top;          // Higher than any PLAB address
  5274     uint      min_tid = 0;            // position of min_val this round
  5275     for (uint j = 0; j < ParallelGCThreads; j++) {
  5276       ChunkArray* cur_sca = &_survivor_plab_array[j];
  5277       if (_cursor[j] == cur_sca->end()) {
  5278         continue;
  5280       assert(_cursor[j] < cur_sca->end(), "ctl pt invariant");
  5281       HeapWord* cur_val = cur_sca->nth(_cursor[j]);
  5282       assert(surv->used_region().contains(cur_val), "Out of bounds value");
  5283       if (cur_val < min_val) {
  5284         min_tid = j;
  5285         min_val = cur_val;
  5286       } else {
  5287         assert(cur_val < top, "All recorded addresses should be less");
  5290     // At this point min_val and min_tid are respectively
  5291     // the least address in _survivor_plab_array[j]->nth(_cursor[j])
  5292     // and the thread (j) that witnesses that address.
  5293     // We record this address in the _survivor_chunk_array[i]
  5294     // and increment _cursor[min_tid] prior to the next round i.
  5295     if (min_val == top) {
  5296       break;
  5298     _survivor_chunk_array[i] = min_val;
  5299     _cursor[min_tid]++;
  5301   // We are all done; record the size of the _survivor_chunk_array
  5302   _survivor_chunk_index = i; // exclusive: [0, i)
  5303   if (PrintCMSStatistics > 0) {
  5304     gclog_or_tty->print(" (Survivor:" SIZE_FORMAT "chunks) ", i);
  5306   // Verify that we used up all the recorded entries
  5307   #ifdef ASSERT
  5308     size_t total = 0;
  5309     for (uint j = 0; j < ParallelGCThreads; j++) {
  5310       assert(_cursor[j] == _survivor_plab_array[j].end(), "Ctl pt invariant");
  5311       total += _cursor[j];
  5313     assert(total == _survivor_chunk_index, "Ctl Pt Invariant");
  5314     // Check that the merged array is in sorted order
  5315     if (total > 0) {
  5316       for (size_t i = 0; i < total - 1; i++) {
  5317         if (PrintCMSStatistics > 0) {
  5318           gclog_or_tty->print(" (chunk" SIZE_FORMAT ":" INTPTR_FORMAT ") ",
  5319                               i, _survivor_chunk_array[i]);
  5321         assert(_survivor_chunk_array[i] < _survivor_chunk_array[i+1],
  5322                "Not sorted");
  5325   #endif // ASSERT
  5328 // Set up the space's par_seq_tasks structure for work claiming
  5329 // for parallel rescan of young gen.
  5330 // See ParRescanTask where this is currently used.
  5331 void
  5332 CMSCollector::
  5333 initialize_sequential_subtasks_for_young_gen_rescan(int n_threads) {
  5334   assert(n_threads > 0, "Unexpected n_threads argument");
  5335   DefNewGeneration* dng = (DefNewGeneration*)_young_gen;
  5337   // Eden space
  5339     SequentialSubTasksDone* pst = dng->eden()->par_seq_tasks();
  5340     assert(!pst->valid(), "Clobbering existing data?");
  5341     // Each valid entry in [0, _eden_chunk_index) represents a task.
  5342     size_t n_tasks = _eden_chunk_index + 1;
  5343     assert(n_tasks == 1 || _eden_chunk_array != NULL, "Error");
  5344     pst->set_par_threads(n_threads);
  5345     pst->set_n_tasks((int)n_tasks);
  5348   // Merge the survivor plab arrays into _survivor_chunk_array
  5349   if (_survivor_plab_array != NULL) {
  5350     merge_survivor_plab_arrays(dng->from());
  5351   } else {
  5352     assert(_survivor_chunk_index == 0, "Error");
  5355   // To space
  5357     SequentialSubTasksDone* pst = dng->to()->par_seq_tasks();
  5358     assert(!pst->valid(), "Clobbering existing data?");
  5359     pst->set_par_threads(n_threads);
  5360     pst->set_n_tasks(1);
  5361     assert(pst->valid(), "Error");
  5364   // From space
  5366     SequentialSubTasksDone* pst = dng->from()->par_seq_tasks();
  5367     assert(!pst->valid(), "Clobbering existing data?");
  5368     size_t n_tasks = _survivor_chunk_index + 1;
  5369     assert(n_tasks == 1 || _survivor_chunk_array != NULL, "Error");
  5370     pst->set_par_threads(n_threads);
  5371     pst->set_n_tasks((int)n_tasks);
  5372     assert(pst->valid(), "Error");
  5376 // Parallel version of remark
  5377 void CMSCollector::do_remark_parallel() {
  5378   GenCollectedHeap* gch = GenCollectedHeap::heap();
  5379   WorkGang* workers = gch->workers();
  5380   assert(workers != NULL, "Need parallel worker threads.");
  5381   int n_workers = workers->total_workers();
  5382   CompactibleFreeListSpace* cms_space  = _cmsGen->cmsSpace();
  5383   CompactibleFreeListSpace* perm_space = _permGen->cmsSpace();
  5385   CMSParRemarkTask tsk(this,
  5386     cms_space, perm_space,
  5387     n_workers, workers, task_queues());
  5389   // Set up for parallel process_strong_roots work.
  5390   gch->set_par_threads(n_workers);
  5391   gch->change_strong_roots_parity();
  5392   // We won't be iterating over the cards in the card table updating
  5393   // the younger_gen cards, so we shouldn't call the following else
  5394   // the verification code as well as subsequent younger_refs_iterate
  5395   // code would get confused. XXX
  5396   // gch->rem_set()->prepare_for_younger_refs_iterate(true); // parallel
  5398   // The young gen rescan work will not be done as part of
  5399   // process_strong_roots (which currently doesn't knw how to
  5400   // parallelize such a scan), but rather will be broken up into
  5401   // a set of parallel tasks (via the sampling that the [abortable]
  5402   // preclean phase did of EdenSpace, plus the [two] tasks of
  5403   // scanning the [two] survivor spaces. Further fine-grain
  5404   // parallelization of the scanning of the survivor spaces
  5405   // themselves, and of precleaning of the younger gen itself
  5406   // is deferred to the future.
  5407   initialize_sequential_subtasks_for_young_gen_rescan(n_workers);
  5409   // The dirty card rescan work is broken up into a "sequence"
  5410   // of parallel tasks (per constituent space) that are dynamically
  5411   // claimed by the parallel threads.
  5412   cms_space->initialize_sequential_subtasks_for_rescan(n_workers);
  5413   perm_space->initialize_sequential_subtasks_for_rescan(n_workers);
  5415   // It turns out that even when we're using 1 thread, doing the work in a
  5416   // separate thread causes wide variance in run times.  We can't help this
  5417   // in the multi-threaded case, but we special-case n=1 here to get
  5418   // repeatable measurements of the 1-thread overhead of the parallel code.
  5419   if (n_workers > 1) {
  5420     // Make refs discovery MT-safe
  5421     ReferenceProcessorMTMutator mt(ref_processor(), true);
  5422     workers->run_task(&tsk);
  5423   } else {
  5424     tsk.work(0);
  5426   gch->set_par_threads(0);  // 0 ==> non-parallel.
  5427   // restore, single-threaded for now, any preserved marks
  5428   // as a result of work_q overflow
  5429   restore_preserved_marks_if_any();
  5432 // Non-parallel version of remark
  5433 void CMSCollector::do_remark_non_parallel() {
  5434   ResourceMark rm;
  5435   HandleMark   hm;
  5436   GenCollectedHeap* gch = GenCollectedHeap::heap();
  5437   MarkRefsIntoAndScanClosure
  5438     mrias_cl(_span, ref_processor(), &_markBitMap, &_modUnionTable,
  5439              &_markStack, &_revisitStack, this,
  5440              false /* should_yield */, false /* not precleaning */);
  5441   MarkFromDirtyCardsClosure
  5442     markFromDirtyCardsClosure(this, _span,
  5443                               NULL,  // space is set further below
  5444                               &_markBitMap, &_markStack, &_revisitStack,
  5445                               &mrias_cl);
  5447     TraceTime t("grey object rescan", PrintGCDetails, false, gclog_or_tty);
  5448     // Iterate over the dirty cards, setting the corresponding bits in the
  5449     // mod union table.
  5451       ModUnionClosure modUnionClosure(&_modUnionTable);
  5452       _ct->ct_bs()->dirty_card_iterate(
  5453                       _cmsGen->used_region(),
  5454                       &modUnionClosure);
  5455       _ct->ct_bs()->dirty_card_iterate(
  5456                       _permGen->used_region(),
  5457                       &modUnionClosure);
  5459     // Having transferred these marks into the modUnionTable, we just need
  5460     // to rescan the marked objects on the dirty cards in the modUnionTable.
  5461     // The initial marking may have been done during an asynchronous
  5462     // collection so there may be dirty bits in the mod-union table.
  5463     const int alignment =
  5464       CardTableModRefBS::card_size * BitsPerWord;
  5466       // ... First handle dirty cards in CMS gen
  5467       markFromDirtyCardsClosure.set_space(_cmsGen->cmsSpace());
  5468       MemRegion ur = _cmsGen->used_region();
  5469       HeapWord* lb = ur.start();
  5470       HeapWord* ub = (HeapWord*)round_to((intptr_t)ur.end(), alignment);
  5471       MemRegion cms_span(lb, ub);
  5472       _modUnionTable.dirty_range_iterate_clear(cms_span,
  5473                                                &markFromDirtyCardsClosure);
  5474       verify_work_stacks_empty();
  5475       if (PrintCMSStatistics != 0) {
  5476         gclog_or_tty->print(" (re-scanned "SIZE_FORMAT" dirty cards in cms gen) ",
  5477           markFromDirtyCardsClosure.num_dirty_cards());
  5481       // .. and then repeat for dirty cards in perm gen
  5482       markFromDirtyCardsClosure.set_space(_permGen->cmsSpace());
  5483       MemRegion ur = _permGen->used_region();
  5484       HeapWord* lb = ur.start();
  5485       HeapWord* ub = (HeapWord*)round_to((intptr_t)ur.end(), alignment);
  5486       MemRegion perm_span(lb, ub);
  5487       _modUnionTable.dirty_range_iterate_clear(perm_span,
  5488                                                &markFromDirtyCardsClosure);
  5489       verify_work_stacks_empty();
  5490       if (PrintCMSStatistics != 0) {
  5491         gclog_or_tty->print(" (re-scanned "SIZE_FORMAT" dirty cards in perm gen) ",
  5492           markFromDirtyCardsClosure.num_dirty_cards());
  5496   if (VerifyDuringGC &&
  5497       GenCollectedHeap::heap()->total_collections() >= VerifyGCStartAt) {
  5498     HandleMark hm;  // Discard invalid handles created during verification
  5499     Universe::verify(true);
  5502     TraceTime t("root rescan", PrintGCDetails, false, gclog_or_tty);
  5504     verify_work_stacks_empty();
  5506     gch->rem_set()->prepare_for_younger_refs_iterate(false); // Not parallel.
  5507     gch->gen_process_strong_roots(_cmsGen->level(),
  5508                                   true,  // younger gens as roots
  5509                                   true,  // collecting perm gen
  5510                                   SharedHeap::ScanningOption(roots_scanning_options()),
  5511                                   NULL, &mrias_cl);
  5513   verify_work_stacks_empty();
  5514   // Restore evacuated mark words, if any, used for overflow list links
  5515   if (!CMSOverflowEarlyRestoration) {
  5516     restore_preserved_marks_if_any();
  5518   verify_overflow_empty();
  5521 ////////////////////////////////////////////////////////
  5522 // Parallel Reference Processing Task Proxy Class
  5523 ////////////////////////////////////////////////////////
  5524 class CMSRefProcTaskProxy: public AbstractGangTask {
  5525   typedef AbstractRefProcTaskExecutor::ProcessTask ProcessTask;
  5526   CMSCollector*          _collector;
  5527   CMSBitMap*             _mark_bit_map;
  5528   const MemRegion        _span;
  5529   OopTaskQueueSet*       _task_queues;
  5530   ParallelTaskTerminator _term;
  5531   ProcessTask&           _task;
  5533 public:
  5534   CMSRefProcTaskProxy(ProcessTask&     task,
  5535                       CMSCollector*    collector,
  5536                       const MemRegion& span,
  5537                       CMSBitMap*       mark_bit_map,
  5538                       int              total_workers,
  5539                       OopTaskQueueSet* task_queues):
  5540     AbstractGangTask("Process referents by policy in parallel"),
  5541     _task(task),
  5542     _collector(collector), _span(span), _mark_bit_map(mark_bit_map),
  5543     _task_queues(task_queues),
  5544     _term(total_workers, task_queues)
  5546       assert(_collector->_span.equals(_span) && !_span.is_empty(),
  5547              "Inconsistency in _span");
  5550   OopTaskQueueSet* task_queues() { return _task_queues; }
  5552   OopTaskQueue* work_queue(int i) { return task_queues()->queue(i); }
  5554   ParallelTaskTerminator* terminator() { return &_term; }
  5556   void do_work_steal(int i,
  5557                      CMSParDrainMarkingStackClosure* drain,
  5558                      CMSParKeepAliveClosure* keep_alive,
  5559                      int* seed);
  5561   virtual void work(int i);
  5562 };
  5564 void CMSRefProcTaskProxy::work(int i) {
  5565   assert(_collector->_span.equals(_span), "Inconsistency in _span");
  5566   CMSParKeepAliveClosure par_keep_alive(_collector, _span,
  5567                                         _mark_bit_map, work_queue(i));
  5568   CMSParDrainMarkingStackClosure par_drain_stack(_collector, _span,
  5569                                                  _mark_bit_map, work_queue(i));
  5570   CMSIsAliveClosure is_alive_closure(_span, _mark_bit_map);
  5571   _task.work(i, is_alive_closure, par_keep_alive, par_drain_stack);
  5572   if (_task.marks_oops_alive()) {
  5573     do_work_steal(i, &par_drain_stack, &par_keep_alive,
  5574                   _collector->hash_seed(i));
  5576   assert(work_queue(i)->size() == 0, "work_queue should be empty");
  5577   assert(_collector->_overflow_list == NULL, "non-empty _overflow_list");
  5580 class CMSRefEnqueueTaskProxy: public AbstractGangTask {
  5581   typedef AbstractRefProcTaskExecutor::EnqueueTask EnqueueTask;
  5582   EnqueueTask& _task;
  5584 public:
  5585   CMSRefEnqueueTaskProxy(EnqueueTask& task)
  5586     : AbstractGangTask("Enqueue reference objects in parallel"),
  5587       _task(task)
  5588   { }
  5590   virtual void work(int i)
  5592     _task.work(i);
  5594 };
  5596 CMSParKeepAliveClosure::CMSParKeepAliveClosure(CMSCollector* collector,
  5597   MemRegion span, CMSBitMap* bit_map, OopTaskQueue* work_queue):
  5598    _collector(collector),
  5599    _span(span),
  5600    _bit_map(bit_map),
  5601    _work_queue(work_queue),
  5602    _mark_and_push(collector, span, bit_map, work_queue),
  5603    _low_water_mark(MIN2((uint)(work_queue->max_elems()/4),
  5604                         (uint)(CMSWorkQueueDrainThreshold * ParallelGCThreads)))
  5605 { }
  5607 // . see if we can share work_queues with ParNew? XXX
  5608 void CMSRefProcTaskProxy::do_work_steal(int i,
  5609   CMSParDrainMarkingStackClosure* drain,
  5610   CMSParKeepAliveClosure* keep_alive,
  5611   int* seed) {
  5612   OopTaskQueue* work_q = work_queue(i);
  5613   NOT_PRODUCT(int num_steals = 0;)
  5614   oop obj_to_scan;
  5615   size_t num_from_overflow_list =
  5616            MIN2((size_t)work_q->max_elems()/4,
  5617                 (size_t)ParGCDesiredObjsFromOverflowList);
  5619   while (true) {
  5620     // Completely finish any left over work from (an) earlier round(s)
  5621     drain->trim_queue(0);
  5622     // Now check if there's any work in the overflow list
  5623     if (_collector->par_take_from_overflow_list(num_from_overflow_list,
  5624                                                 work_q)) {
  5625       // Found something in global overflow list;
  5626       // not yet ready to go stealing work from others.
  5627       // We'd like to assert(work_q->size() != 0, ...)
  5628       // because we just took work from the overflow list,
  5629       // but of course we can't, since all of that might have
  5630       // been already stolen from us.
  5631       continue;
  5633     // Verify that we have no work before we resort to stealing
  5634     assert(work_q->size() == 0, "Have work, shouldn't steal");
  5635     // Try to steal from other queues that have work
  5636     if (task_queues()->steal(i, seed, /* reference */ obj_to_scan)) {
  5637       NOT_PRODUCT(num_steals++;)
  5638       assert(obj_to_scan->is_oop(), "Oops, not an oop!");
  5639       assert(_mark_bit_map->isMarked((HeapWord*)obj_to_scan), "Stole an unmarked oop?");
  5640       // Do scanning work
  5641       obj_to_scan->oop_iterate(keep_alive);
  5642       // Loop around, finish this work, and try to steal some more
  5643     } else if (terminator()->offer_termination()) {
  5644       break;  // nirvana from the infinite cycle
  5647   NOT_PRODUCT(
  5648     if (PrintCMSStatistics != 0) {
  5649       gclog_or_tty->print("\n\t(%d: stole %d oops)", i, num_steals);
  5654 void CMSRefProcTaskExecutor::execute(ProcessTask& task)
  5656   GenCollectedHeap* gch = GenCollectedHeap::heap();
  5657   WorkGang* workers = gch->workers();
  5658   assert(workers != NULL, "Need parallel worker threads.");
  5659   int n_workers = workers->total_workers();
  5660   CMSRefProcTaskProxy rp_task(task, &_collector,
  5661                               _collector.ref_processor()->span(),
  5662                               _collector.markBitMap(),
  5663                               n_workers, _collector.task_queues());
  5664   workers->run_task(&rp_task);
  5667 void CMSRefProcTaskExecutor::execute(EnqueueTask& task)
  5670   GenCollectedHeap* gch = GenCollectedHeap::heap();
  5671   WorkGang* workers = gch->workers();
  5672   assert(workers != NULL, "Need parallel worker threads.");
  5673   CMSRefEnqueueTaskProxy enq_task(task);
  5674   workers->run_task(&enq_task);
  5677 void CMSCollector::refProcessingWork(bool asynch, bool clear_all_soft_refs) {
  5679   ResourceMark rm;
  5680   HandleMark   hm;
  5682   ReferenceProcessor* rp = ref_processor();
  5683   assert(rp->span().equals(_span), "Spans should be equal");
  5684   assert(!rp->enqueuing_is_done(), "Enqueuing should not be complete");
  5685   // Process weak references.
  5686   rp->snap_policy(clear_all_soft_refs);
  5687   verify_work_stacks_empty();
  5689   CMSKeepAliveClosure cmsKeepAliveClosure(this, _span, &_markBitMap,
  5690                                           &_markStack, false /* !preclean */);
  5691   CMSDrainMarkingStackClosure cmsDrainMarkingStackClosure(this,
  5692                                 _span, &_markBitMap, &_markStack,
  5693                                 &cmsKeepAliveClosure, false /* !preclean */);
  5695     TraceTime t("weak refs processing", PrintGCDetails, false, gclog_or_tty);
  5696     if (rp->processing_is_mt()) {
  5697       CMSRefProcTaskExecutor task_executor(*this);
  5698       rp->process_discovered_references(&_is_alive_closure,
  5699                                         &cmsKeepAliveClosure,
  5700                                         &cmsDrainMarkingStackClosure,
  5701                                         &task_executor);
  5702     } else {
  5703       rp->process_discovered_references(&_is_alive_closure,
  5704                                         &cmsKeepAliveClosure,
  5705                                         &cmsDrainMarkingStackClosure,
  5706                                         NULL);
  5708     verify_work_stacks_empty();
  5711   if (should_unload_classes()) {
  5713       TraceTime t("class unloading", PrintGCDetails, false, gclog_or_tty);
  5715       // Follow SystemDictionary roots and unload classes
  5716       bool purged_class = SystemDictionary::do_unloading(&_is_alive_closure);
  5718       // Follow CodeCache roots and unload any methods marked for unloading
  5719       CodeCache::do_unloading(&_is_alive_closure,
  5720                               &cmsKeepAliveClosure,
  5721                               purged_class);
  5723       cmsDrainMarkingStackClosure.do_void();
  5724       verify_work_stacks_empty();
  5726       // Update subklass/sibling/implementor links in KlassKlass descendants
  5727       assert(!_revisitStack.isEmpty(), "revisit stack should not be empty");
  5728       oop k;
  5729       while ((k = _revisitStack.pop()) != NULL) {
  5730         ((Klass*)(oopDesc*)k)->follow_weak_klass_links(
  5731                        &_is_alive_closure,
  5732                        &cmsKeepAliveClosure);
  5734       assert(!ClassUnloading ||
  5735              (_markStack.isEmpty() && overflow_list_is_empty()),
  5736              "Should not have found new reachable objects");
  5737       assert(_revisitStack.isEmpty(), "revisit stack should have been drained");
  5738       cmsDrainMarkingStackClosure.do_void();
  5739       verify_work_stacks_empty();
  5743       TraceTime t("scrub symbol & string tables", PrintGCDetails, false, gclog_or_tty);
  5744       // Now clean up stale oops in SymbolTable and StringTable
  5745       SymbolTable::unlink(&_is_alive_closure);
  5746       StringTable::unlink(&_is_alive_closure);
  5750   verify_work_stacks_empty();
  5751   // Restore any preserved marks as a result of mark stack or
  5752   // work queue overflow
  5753   restore_preserved_marks_if_any();  // done single-threaded for now
  5755   rp->set_enqueuing_is_done(true);
  5756   if (rp->processing_is_mt()) {
  5757     CMSRefProcTaskExecutor task_executor(*this);
  5758     rp->enqueue_discovered_references(&task_executor);
  5759   } else {
  5760     rp->enqueue_discovered_references(NULL);
  5762   rp->verify_no_references_recorded();
  5763   assert(!rp->discovery_enabled(), "should have been disabled");
  5765   // JVMTI object tagging is based on JNI weak refs. If any of these
  5766   // refs were cleared then JVMTI needs to update its maps and
  5767   // maybe post ObjectFrees to agents.
  5768   JvmtiExport::cms_ref_processing_epilogue();
  5771 #ifndef PRODUCT
  5772 void CMSCollector::check_correct_thread_executing() {
  5773   Thread* t = Thread::current();
  5774   // Only the VM thread or the CMS thread should be here.
  5775   assert(t->is_ConcurrentGC_thread() || t->is_VM_thread(),
  5776          "Unexpected thread type");
  5777   // If this is the vm thread, the foreground process
  5778   // should not be waiting.  Note that _foregroundGCIsActive is
  5779   // true while the foreground collector is waiting.
  5780   if (_foregroundGCShouldWait) {
  5781     // We cannot be the VM thread
  5782     assert(t->is_ConcurrentGC_thread(),
  5783            "Should be CMS thread");
  5784   } else {
  5785     // We can be the CMS thread only if we are in a stop-world
  5786     // phase of CMS collection.
  5787     if (t->is_ConcurrentGC_thread()) {
  5788       assert(_collectorState == InitialMarking ||
  5789              _collectorState == FinalMarking,
  5790              "Should be a stop-world phase");
  5791       // The CMS thread should be holding the CMS_token.
  5792       assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  5793              "Potential interference with concurrently "
  5794              "executing VM thread");
  5798 #endif
  5800 void CMSCollector::sweep(bool asynch) {
  5801   assert(_collectorState == Sweeping, "just checking");
  5802   check_correct_thread_executing();
  5803   verify_work_stacks_empty();
  5804   verify_overflow_empty();
  5805   incrementSweepCount();
  5806   _sweep_timer.stop();
  5807   _sweep_estimate.sample(_sweep_timer.seconds());
  5808   size_policy()->avg_cms_free_at_sweep()->sample(_cmsGen->free());
  5810   // PermGen verification support: If perm gen sweeping is disabled in
  5811   // this cycle, we preserve the perm gen object "deadness" information
  5812   // in the perm_gen_verify_bit_map. In order to do that we traverse
  5813   // all blocks in perm gen and mark all dead objects.
  5814   if (verifying() && !should_unload_classes()) {
  5815     assert(perm_gen_verify_bit_map()->sizeInBits() != 0,
  5816            "Should have already been allocated");
  5817     MarkDeadObjectsClosure mdo(this, _permGen->cmsSpace(),
  5818                                markBitMap(), perm_gen_verify_bit_map());
  5819     if (asynch) {
  5820       CMSTokenSyncWithLocks ts(true, _permGen->freelistLock(),
  5821                                bitMapLock());
  5822       _permGen->cmsSpace()->blk_iterate(&mdo);
  5823     } else {
  5824       // In the case of synchronous sweep, we already have
  5825       // the requisite locks/tokens.
  5826       _permGen->cmsSpace()->blk_iterate(&mdo);
  5830   if (asynch) {
  5831     TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty);
  5832     CMSPhaseAccounting pa(this, "sweep", !PrintGCDetails);
  5833     // First sweep the old gen then the perm gen
  5835       CMSTokenSyncWithLocks ts(true, _cmsGen->freelistLock(),
  5836                                bitMapLock());
  5837       sweepWork(_cmsGen, asynch);
  5840     // Now repeat for perm gen
  5841     if (should_unload_classes()) {
  5842       CMSTokenSyncWithLocks ts(true, _permGen->freelistLock(),
  5843                              bitMapLock());
  5844       sweepWork(_permGen, asynch);
  5847     // Update Universe::_heap_*_at_gc figures.
  5848     // We need all the free list locks to make the abstract state
  5849     // transition from Sweeping to Resetting. See detailed note
  5850     // further below.
  5852       CMSTokenSyncWithLocks ts(true, _cmsGen->freelistLock(),
  5853                                _permGen->freelistLock());
  5854       // Update heap occupancy information which is used as
  5855       // input to soft ref clearing policy at the next gc.
  5856       Universe::update_heap_info_at_gc();
  5857       _collectorState = Resizing;
  5859   } else {
  5860     // already have needed locks
  5861     sweepWork(_cmsGen,  asynch);
  5863     if (should_unload_classes()) {
  5864       sweepWork(_permGen, asynch);
  5866     // Update heap occupancy information which is used as
  5867     // input to soft ref clearing policy at the next gc.
  5868     Universe::update_heap_info_at_gc();
  5869     _collectorState = Resizing;
  5871   verify_work_stacks_empty();
  5872   verify_overflow_empty();
  5874   _sweep_timer.reset();
  5875   _sweep_timer.start();
  5877   update_time_of_last_gc(os::javaTimeMillis());
  5879   // NOTE on abstract state transitions:
  5880   // Mutators allocate-live and/or mark the mod-union table dirty
  5881   // based on the state of the collection.  The former is done in
  5882   // the interval [Marking, Sweeping] and the latter in the interval
  5883   // [Marking, Sweeping).  Thus the transitions into the Marking state
  5884   // and out of the Sweeping state must be synchronously visible
  5885   // globally to the mutators.
  5886   // The transition into the Marking state happens with the world
  5887   // stopped so the mutators will globally see it.  Sweeping is
  5888   // done asynchronously by the background collector so the transition
  5889   // from the Sweeping state to the Resizing state must be done
  5890   // under the freelistLock (as is the check for whether to
  5891   // allocate-live and whether to dirty the mod-union table).
  5892   assert(_collectorState == Resizing, "Change of collector state to"
  5893     " Resizing must be done under the freelistLocks (plural)");
  5895   // Now that sweeping has been completed, if the GCH's
  5896   // incremental_collection_will_fail flag is set, clear it,
  5897   // thus inviting a younger gen collection to promote into
  5898   // this generation. If such a promotion may still fail,
  5899   // the flag will be set again when a young collection is
  5900   // attempted.
  5901   // I think the incremental_collection_will_fail flag's use
  5902   // is specific to a 2 generation collection policy, so i'll
  5903   // assert that that's the configuration we are operating within.
  5904   // The use of the flag can and should be generalized appropriately
  5905   // in the future to deal with a general n-generation system.
  5907   GenCollectedHeap* gch = GenCollectedHeap::heap();
  5908   assert(gch->collector_policy()->is_two_generation_policy(),
  5909          "Resetting of incremental_collection_will_fail flag"
  5910          " may be incorrect otherwise");
  5911   gch->clear_incremental_collection_will_fail();
  5912   gch->update_full_collections_completed(_collection_count_start);
  5915 // FIX ME!!! Looks like this belongs in CFLSpace, with
  5916 // CMSGen merely delegating to it.
  5917 void ConcurrentMarkSweepGeneration::setNearLargestChunk() {
  5918   double nearLargestPercent = 0.999;
  5919   HeapWord*  minAddr        = _cmsSpace->bottom();
  5920   HeapWord*  largestAddr    =
  5921     (HeapWord*) _cmsSpace->dictionary()->findLargestDict();
  5922   if (largestAddr == 0) {
  5923     // The dictionary appears to be empty.  In this case
  5924     // try to coalesce at the end of the heap.
  5925     largestAddr = _cmsSpace->end();
  5927   size_t largestOffset     = pointer_delta(largestAddr, minAddr);
  5928   size_t nearLargestOffset =
  5929     (size_t)((double)largestOffset * nearLargestPercent) - MinChunkSize;
  5930   _cmsSpace->set_nearLargestChunk(minAddr + nearLargestOffset);
  5933 bool ConcurrentMarkSweepGeneration::isNearLargestChunk(HeapWord* addr) {
  5934   return addr >= _cmsSpace->nearLargestChunk();
  5937 FreeChunk* ConcurrentMarkSweepGeneration::find_chunk_at_end() {
  5938   return _cmsSpace->find_chunk_at_end();
  5941 void ConcurrentMarkSweepGeneration::update_gc_stats(int current_level,
  5942                                                     bool full) {
  5943   // The next lower level has been collected.  Gather any statistics
  5944   // that are of interest at this point.
  5945   if (!full && (current_level + 1) == level()) {
  5946     // Gather statistics on the young generation collection.
  5947     collector()->stats().record_gc0_end(used());
  5951 CMSAdaptiveSizePolicy* ConcurrentMarkSweepGeneration::size_policy() {
  5952   GenCollectedHeap* gch = GenCollectedHeap::heap();
  5953   assert(gch->kind() == CollectedHeap::GenCollectedHeap,
  5954     "Wrong type of heap");
  5955   CMSAdaptiveSizePolicy* sp = (CMSAdaptiveSizePolicy*)
  5956     gch->gen_policy()->size_policy();
  5957   assert(sp->is_gc_cms_adaptive_size_policy(),
  5958     "Wrong type of size policy");
  5959   return sp;
  5962 void ConcurrentMarkSweepGeneration::rotate_debug_collection_type() {
  5963   if (PrintGCDetails && Verbose) {
  5964     gclog_or_tty->print("Rotate from %d ", _debug_collection_type);
  5966   _debug_collection_type = (CollectionTypes) (_debug_collection_type + 1);
  5967   _debug_collection_type =
  5968     (CollectionTypes) (_debug_collection_type % Unknown_collection_type);
  5969   if (PrintGCDetails && Verbose) {
  5970     gclog_or_tty->print_cr("to %d ", _debug_collection_type);
  5974 void CMSCollector::sweepWork(ConcurrentMarkSweepGeneration* gen,
  5975   bool asynch) {
  5976   // We iterate over the space(s) underlying this generation,
  5977   // checking the mark bit map to see if the bits corresponding
  5978   // to specific blocks are marked or not. Blocks that are
  5979   // marked are live and are not swept up. All remaining blocks
  5980   // are swept up, with coalescing on-the-fly as we sweep up
  5981   // contiguous free and/or garbage blocks:
  5982   // We need to ensure that the sweeper synchronizes with allocators
  5983   // and stop-the-world collectors. In particular, the following
  5984   // locks are used:
  5985   // . CMS token: if this is held, a stop the world collection cannot occur
  5986   // . freelistLock: if this is held no allocation can occur from this
  5987   //                 generation by another thread
  5988   // . bitMapLock: if this is held, no other thread can access or update
  5989   //
  5991   // Note that we need to hold the freelistLock if we use
  5992   // block iterate below; else the iterator might go awry if
  5993   // a mutator (or promotion) causes block contents to change
  5994   // (for instance if the allocator divvies up a block).
  5995   // If we hold the free list lock, for all practical purposes
  5996   // young generation GC's can't occur (they'll usually need to
  5997   // promote), so we might as well prevent all young generation
  5998   // GC's while we do a sweeping step. For the same reason, we might
  5999   // as well take the bit map lock for the entire duration
  6001   // check that we hold the requisite locks
  6002   assert(have_cms_token(), "Should hold cms token");
  6003   assert(   (asynch && ConcurrentMarkSweepThread::cms_thread_has_cms_token())
  6004          || (!asynch && ConcurrentMarkSweepThread::vm_thread_has_cms_token()),
  6005         "Should possess CMS token to sweep");
  6006   assert_lock_strong(gen->freelistLock());
  6007   assert_lock_strong(bitMapLock());
  6009   assert(!_sweep_timer.is_active(), "Was switched off in an outer context");
  6010   gen->cmsSpace()->beginSweepFLCensus((float)(_sweep_timer.seconds()),
  6011                                       _sweep_estimate.padded_average());
  6012   gen->setNearLargestChunk();
  6015     SweepClosure sweepClosure(this, gen, &_markBitMap,
  6016                             CMSYield && asynch);
  6017     gen->cmsSpace()->blk_iterate_careful(&sweepClosure);
  6018     // We need to free-up/coalesce garbage/blocks from a
  6019     // co-terminal free run. This is done in the SweepClosure
  6020     // destructor; so, do not remove this scope, else the
  6021     // end-of-sweep-census below will be off by a little bit.
  6023   gen->cmsSpace()->sweep_completed();
  6024   gen->cmsSpace()->endSweepFLCensus(sweepCount());
  6025   if (should_unload_classes()) {                // unloaded classes this cycle,
  6026     _concurrent_cycles_since_last_unload = 0;   // ... reset count
  6027   } else {                                      // did not unload classes,
  6028     _concurrent_cycles_since_last_unload++;     // ... increment count
  6032 // Reset CMS data structures (for now just the marking bit map)
  6033 // preparatory for the next cycle.
  6034 void CMSCollector::reset(bool asynch) {
  6035   GenCollectedHeap* gch = GenCollectedHeap::heap();
  6036   CMSAdaptiveSizePolicy* sp = size_policy();
  6037   AdaptiveSizePolicyOutput(sp, gch->total_collections());
  6038   if (asynch) {
  6039     CMSTokenSyncWithLocks ts(true, bitMapLock());
  6041     // If the state is not "Resetting", the foreground  thread
  6042     // has done a collection and the resetting.
  6043     if (_collectorState != Resetting) {
  6044       assert(_collectorState == Idling, "The state should only change"
  6045         " because the foreground collector has finished the collection");
  6046       return;
  6049     // Clear the mark bitmap (no grey objects to start with)
  6050     // for the next cycle.
  6051     TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty);
  6052     CMSPhaseAccounting cmspa(this, "reset", !PrintGCDetails);
  6054     HeapWord* curAddr = _markBitMap.startWord();
  6055     while (curAddr < _markBitMap.endWord()) {
  6056       size_t remaining  = pointer_delta(_markBitMap.endWord(), curAddr);
  6057       MemRegion chunk(curAddr, MIN2(CMSBitMapYieldQuantum, remaining));
  6058       _markBitMap.clear_large_range(chunk);
  6059       if (ConcurrentMarkSweepThread::should_yield() &&
  6060           !foregroundGCIsActive() &&
  6061           CMSYield) {
  6062         assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  6063                "CMS thread should hold CMS token");
  6064         assert_lock_strong(bitMapLock());
  6065         bitMapLock()->unlock();
  6066         ConcurrentMarkSweepThread::desynchronize(true);
  6067         ConcurrentMarkSweepThread::acknowledge_yield_request();
  6068         stopTimer();
  6069         if (PrintCMSStatistics != 0) {
  6070           incrementYields();
  6072         icms_wait();
  6074         // See the comment in coordinator_yield()
  6075         for (unsigned i = 0; i < CMSYieldSleepCount &&
  6076                          ConcurrentMarkSweepThread::should_yield() &&
  6077                          !CMSCollector::foregroundGCIsActive(); ++i) {
  6078           os::sleep(Thread::current(), 1, false);
  6079           ConcurrentMarkSweepThread::acknowledge_yield_request();
  6082         ConcurrentMarkSweepThread::synchronize(true);
  6083         bitMapLock()->lock_without_safepoint_check();
  6084         startTimer();
  6086       curAddr = chunk.end();
  6088     _collectorState = Idling;
  6089   } else {
  6090     // already have the lock
  6091     assert(_collectorState == Resetting, "just checking");
  6092     assert_lock_strong(bitMapLock());
  6093     _markBitMap.clear_all();
  6094     _collectorState = Idling;
  6097   // Stop incremental mode after a cycle completes, so that any future cycles
  6098   // are triggered by allocation.
  6099   stop_icms();
  6101   NOT_PRODUCT(
  6102     if (RotateCMSCollectionTypes) {
  6103       _cmsGen->rotate_debug_collection_type();
  6108 void CMSCollector::do_CMS_operation(CMS_op_type op) {
  6109   gclog_or_tty->date_stamp(PrintGC && PrintGCDateStamps);
  6110   TraceCPUTime tcpu(PrintGCDetails, true, gclog_or_tty);
  6111   TraceTime t("GC", PrintGC, !PrintGCDetails, gclog_or_tty);
  6112   TraceCollectorStats tcs(counters());
  6114   switch (op) {
  6115     case CMS_op_checkpointRootsInitial: {
  6116       checkpointRootsInitial(true);       // asynch
  6117       if (PrintGC) {
  6118         _cmsGen->printOccupancy("initial-mark");
  6120       break;
  6122     case CMS_op_checkpointRootsFinal: {
  6123       checkpointRootsFinal(true,    // asynch
  6124                            false,   // !clear_all_soft_refs
  6125                            false);  // !init_mark_was_synchronous
  6126       if (PrintGC) {
  6127         _cmsGen->printOccupancy("remark");
  6129       break;
  6131     default:
  6132       fatal("No such CMS_op");
  6136 #ifndef PRODUCT
  6137 size_t const CMSCollector::skip_header_HeapWords() {
  6138   return FreeChunk::header_size();
  6141 // Try and collect here conditions that should hold when
  6142 // CMS thread is exiting. The idea is that the foreground GC
  6143 // thread should not be blocked if it wants to terminate
  6144 // the CMS thread and yet continue to run the VM for a while
  6145 // after that.
  6146 void CMSCollector::verify_ok_to_terminate() const {
  6147   assert(Thread::current()->is_ConcurrentGC_thread(),
  6148          "should be called by CMS thread");
  6149   assert(!_foregroundGCShouldWait, "should be false");
  6150   // We could check here that all the various low-level locks
  6151   // are not held by the CMS thread, but that is overkill; see
  6152   // also CMSThread::verify_ok_to_terminate() where the CGC_lock
  6153   // is checked.
  6155 #endif
  6157 size_t CMSCollector::block_size_using_printezis_bits(HeapWord* addr) const {
  6158    assert(_markBitMap.isMarked(addr) && _markBitMap.isMarked(addr + 1),
  6159           "missing Printezis mark?");
  6160   HeapWord* nextOneAddr = _markBitMap.getNextMarkedWordAddress(addr + 2);
  6161   size_t size = pointer_delta(nextOneAddr + 1, addr);
  6162   assert(size == CompactibleFreeListSpace::adjustObjectSize(size),
  6163          "alignment problem");
  6164   assert(size >= 3, "Necessary for Printezis marks to work");
  6165   return size;
  6168 // A variant of the above (block_size_using_printezis_bits()) except
  6169 // that we return 0 if the P-bits are not yet set.
  6170 size_t CMSCollector::block_size_if_printezis_bits(HeapWord* addr) const {
  6171   if (_markBitMap.isMarked(addr)) {
  6172     assert(_markBitMap.isMarked(addr + 1), "Missing Printezis bit?");
  6173     HeapWord* nextOneAddr = _markBitMap.getNextMarkedWordAddress(addr + 2);
  6174     size_t size = pointer_delta(nextOneAddr + 1, addr);
  6175     assert(size == CompactibleFreeListSpace::adjustObjectSize(size),
  6176            "alignment problem");
  6177     assert(size >= 3, "Necessary for Printezis marks to work");
  6178     return size;
  6179   } else {
  6180     assert(!_markBitMap.isMarked(addr + 1), "Bit map inconsistency?");
  6181     return 0;
  6185 HeapWord* CMSCollector::next_card_start_after_block(HeapWord* addr) const {
  6186   size_t sz = 0;
  6187   oop p = (oop)addr;
  6188   if (p->klass_or_null() != NULL && p->is_parsable()) {
  6189     sz = CompactibleFreeListSpace::adjustObjectSize(p->size());
  6190   } else {
  6191     sz = block_size_using_printezis_bits(addr);
  6193   assert(sz > 0, "size must be nonzero");
  6194   HeapWord* next_block = addr + sz;
  6195   HeapWord* next_card  = (HeapWord*)round_to((uintptr_t)next_block,
  6196                                              CardTableModRefBS::card_size);
  6197   assert(round_down((uintptr_t)addr,      CardTableModRefBS::card_size) <
  6198          round_down((uintptr_t)next_card, CardTableModRefBS::card_size),
  6199          "must be different cards");
  6200   return next_card;
  6204 // CMS Bit Map Wrapper /////////////////////////////////////////
  6206 // Construct a CMS bit map infrastructure, but don't create the
  6207 // bit vector itself. That is done by a separate call CMSBitMap::allocate()
  6208 // further below.
  6209 CMSBitMap::CMSBitMap(int shifter, int mutex_rank, const char* mutex_name):
  6210   _bm(),
  6211   _shifter(shifter),
  6212   _lock(mutex_rank >= 0 ? new Mutex(mutex_rank, mutex_name, true) : NULL)
  6214   _bmStartWord = 0;
  6215   _bmWordSize  = 0;
  6218 bool CMSBitMap::allocate(MemRegion mr) {
  6219   _bmStartWord = mr.start();
  6220   _bmWordSize  = mr.word_size();
  6221   ReservedSpace brs(ReservedSpace::allocation_align_size_up(
  6222                      (_bmWordSize >> (_shifter + LogBitsPerByte)) + 1));
  6223   if (!brs.is_reserved()) {
  6224     warning("CMS bit map allocation failure");
  6225     return false;
  6227   // For now we'll just commit all of the bit map up fromt.
  6228   // Later on we'll try to be more parsimonious with swap.
  6229   if (!_virtual_space.initialize(brs, brs.size())) {
  6230     warning("CMS bit map backing store failure");
  6231     return false;
  6233   assert(_virtual_space.committed_size() == brs.size(),
  6234          "didn't reserve backing store for all of CMS bit map?");
  6235   _bm.set_map((BitMap::bm_word_t*)_virtual_space.low());
  6236   assert(_virtual_space.committed_size() << (_shifter + LogBitsPerByte) >=
  6237          _bmWordSize, "inconsistency in bit map sizing");
  6238   _bm.set_size(_bmWordSize >> _shifter);
  6240   // bm.clear(); // can we rely on getting zero'd memory? verify below
  6241   assert(isAllClear(),
  6242          "Expected zero'd memory from ReservedSpace constructor");
  6243   assert(_bm.size() == heapWordDiffToOffsetDiff(sizeInWords()),
  6244          "consistency check");
  6245   return true;
  6248 void CMSBitMap::dirty_range_iterate_clear(MemRegion mr, MemRegionClosure* cl) {
  6249   HeapWord *next_addr, *end_addr, *last_addr;
  6250   assert_locked();
  6251   assert(covers(mr), "out-of-range error");
  6252   // XXX assert that start and end are appropriately aligned
  6253   for (next_addr = mr.start(), end_addr = mr.end();
  6254        next_addr < end_addr; next_addr = last_addr) {
  6255     MemRegion dirty_region = getAndClearMarkedRegion(next_addr, end_addr);
  6256     last_addr = dirty_region.end();
  6257     if (!dirty_region.is_empty()) {
  6258       cl->do_MemRegion(dirty_region);
  6259     } else {
  6260       assert(last_addr == end_addr, "program logic");
  6261       return;
  6266 #ifndef PRODUCT
  6267 void CMSBitMap::assert_locked() const {
  6268   CMSLockVerifier::assert_locked(lock());
  6271 bool CMSBitMap::covers(MemRegion mr) const {
  6272   // assert(_bm.map() == _virtual_space.low(), "map inconsistency");
  6273   assert((size_t)_bm.size() == (_bmWordSize >> _shifter),
  6274          "size inconsistency");
  6275   return (mr.start() >= _bmStartWord) &&
  6276          (mr.end()   <= endWord());
  6279 bool CMSBitMap::covers(HeapWord* start, size_t size) const {
  6280     return (start >= _bmStartWord && (start + size) <= endWord());
  6283 void CMSBitMap::verifyNoOneBitsInRange(HeapWord* left, HeapWord* right) {
  6284   // verify that there are no 1 bits in the interval [left, right)
  6285   FalseBitMapClosure falseBitMapClosure;
  6286   iterate(&falseBitMapClosure, left, right);
  6289 void CMSBitMap::region_invariant(MemRegion mr)
  6291   assert_locked();
  6292   // mr = mr.intersection(MemRegion(_bmStartWord, _bmWordSize));
  6293   assert(!mr.is_empty(), "unexpected empty region");
  6294   assert(covers(mr), "mr should be covered by bit map");
  6295   // convert address range into offset range
  6296   size_t start_ofs = heapWordToOffset(mr.start());
  6297   // Make sure that end() is appropriately aligned
  6298   assert(mr.end() == (HeapWord*)round_to((intptr_t)mr.end(),
  6299                         (1 << (_shifter+LogHeapWordSize))),
  6300          "Misaligned mr.end()");
  6301   size_t end_ofs   = heapWordToOffset(mr.end());
  6302   assert(end_ofs > start_ofs, "Should mark at least one bit");
  6305 #endif
  6307 bool CMSMarkStack::allocate(size_t size) {
  6308   // allocate a stack of the requisite depth
  6309   ReservedSpace rs(ReservedSpace::allocation_align_size_up(
  6310                    size * sizeof(oop)));
  6311   if (!rs.is_reserved()) {
  6312     warning("CMSMarkStack allocation failure");
  6313     return false;
  6315   if (!_virtual_space.initialize(rs, rs.size())) {
  6316     warning("CMSMarkStack backing store failure");
  6317     return false;
  6319   assert(_virtual_space.committed_size() == rs.size(),
  6320          "didn't reserve backing store for all of CMS stack?");
  6321   _base = (oop*)(_virtual_space.low());
  6322   _index = 0;
  6323   _capacity = size;
  6324   NOT_PRODUCT(_max_depth = 0);
  6325   return true;
  6328 // XXX FIX ME !!! In the MT case we come in here holding a
  6329 // leaf lock. For printing we need to take a further lock
  6330 // which has lower rank. We need to recallibrate the two
  6331 // lock-ranks involved in order to be able to rpint the
  6332 // messages below. (Or defer the printing to the caller.
  6333 // For now we take the expedient path of just disabling the
  6334 // messages for the problematic case.)
  6335 void CMSMarkStack::expand() {
  6336   assert(_capacity <= CMSMarkStackSizeMax, "stack bigger than permitted");
  6337   if (_capacity == CMSMarkStackSizeMax) {
  6338     if (_hit_limit++ == 0 && !CMSConcurrentMTEnabled && PrintGCDetails) {
  6339       // We print a warning message only once per CMS cycle.
  6340       gclog_or_tty->print_cr(" (benign) Hit CMSMarkStack max size limit");
  6342     return;
  6344   // Double capacity if possible
  6345   size_t new_capacity = MIN2(_capacity*2, CMSMarkStackSizeMax);
  6346   // Do not give up existing stack until we have managed to
  6347   // get the double capacity that we desired.
  6348   ReservedSpace rs(ReservedSpace::allocation_align_size_up(
  6349                    new_capacity * sizeof(oop)));
  6350   if (rs.is_reserved()) {
  6351     // Release the backing store associated with old stack
  6352     _virtual_space.release();
  6353     // Reinitialize virtual space for new stack
  6354     if (!_virtual_space.initialize(rs, rs.size())) {
  6355       fatal("Not enough swap for expanded marking stack");
  6357     _base = (oop*)(_virtual_space.low());
  6358     _index = 0;
  6359     _capacity = new_capacity;
  6360   } else if (_failed_double++ == 0 && !CMSConcurrentMTEnabled && PrintGCDetails) {
  6361     // Failed to double capacity, continue;
  6362     // we print a detail message only once per CMS cycle.
  6363     gclog_or_tty->print(" (benign) Failed to expand marking stack from "SIZE_FORMAT"K to "
  6364             SIZE_FORMAT"K",
  6365             _capacity / K, new_capacity / K);
  6370 // Closures
  6371 // XXX: there seems to be a lot of code  duplication here;
  6372 // should refactor and consolidate common code.
  6374 // This closure is used to mark refs into the CMS generation in
  6375 // the CMS bit map. Called at the first checkpoint. This closure
  6376 // assumes that we do not need to re-mark dirty cards; if the CMS
  6377 // generation on which this is used is not an oldest (modulo perm gen)
  6378 // generation then this will lose younger_gen cards!
  6380 MarkRefsIntoClosure::MarkRefsIntoClosure(
  6381   MemRegion span, CMSBitMap* bitMap, bool should_do_nmethods):
  6382     _span(span),
  6383     _bitMap(bitMap),
  6384     _should_do_nmethods(should_do_nmethods)
  6386     assert(_ref_processor == NULL, "deliberately left NULL");
  6387     assert(_bitMap->covers(_span), "_bitMap/_span mismatch");
  6390 void MarkRefsIntoClosure::do_oop(oop obj) {
  6391   // if p points into _span, then mark corresponding bit in _markBitMap
  6392   assert(obj->is_oop(), "expected an oop");
  6393   HeapWord* addr = (HeapWord*)obj;
  6394   if (_span.contains(addr)) {
  6395     // this should be made more efficient
  6396     _bitMap->mark(addr);
  6400 void MarkRefsIntoClosure::do_oop(oop* p)       { MarkRefsIntoClosure::do_oop_work(p); }
  6401 void MarkRefsIntoClosure::do_oop(narrowOop* p) { MarkRefsIntoClosure::do_oop_work(p); }
  6403 // A variant of the above, used for CMS marking verification.
  6404 MarkRefsIntoVerifyClosure::MarkRefsIntoVerifyClosure(
  6405   MemRegion span, CMSBitMap* verification_bm, CMSBitMap* cms_bm,
  6406   bool should_do_nmethods):
  6407     _span(span),
  6408     _verification_bm(verification_bm),
  6409     _cms_bm(cms_bm),
  6410     _should_do_nmethods(should_do_nmethods) {
  6411     assert(_ref_processor == NULL, "deliberately left NULL");
  6412     assert(_verification_bm->covers(_span), "_verification_bm/_span mismatch");
  6415 void MarkRefsIntoVerifyClosure::do_oop(oop obj) {
  6416   // if p points into _span, then mark corresponding bit in _markBitMap
  6417   assert(obj->is_oop(), "expected an oop");
  6418   HeapWord* addr = (HeapWord*)obj;
  6419   if (_span.contains(addr)) {
  6420     _verification_bm->mark(addr);
  6421     if (!_cms_bm->isMarked(addr)) {
  6422       oop(addr)->print();
  6423       gclog_or_tty->print_cr(" (" INTPTR_FORMAT " should have been marked)", addr);
  6424       fatal("... aborting");
  6429 void MarkRefsIntoVerifyClosure::do_oop(oop* p)       { MarkRefsIntoVerifyClosure::do_oop_work(p); }
  6430 void MarkRefsIntoVerifyClosure::do_oop(narrowOop* p) { MarkRefsIntoVerifyClosure::do_oop_work(p); }
  6432 //////////////////////////////////////////////////
  6433 // MarkRefsIntoAndScanClosure
  6434 //////////////////////////////////////////////////
  6436 MarkRefsIntoAndScanClosure::MarkRefsIntoAndScanClosure(MemRegion span,
  6437                                                        ReferenceProcessor* rp,
  6438                                                        CMSBitMap* bit_map,
  6439                                                        CMSBitMap* mod_union_table,
  6440                                                        CMSMarkStack*  mark_stack,
  6441                                                        CMSMarkStack*  revisit_stack,
  6442                                                        CMSCollector* collector,
  6443                                                        bool should_yield,
  6444                                                        bool concurrent_precleaning):
  6445   _collector(collector),
  6446   _span(span),
  6447   _bit_map(bit_map),
  6448   _mark_stack(mark_stack),
  6449   _pushAndMarkClosure(collector, span, rp, bit_map, mod_union_table,
  6450                       mark_stack, revisit_stack, concurrent_precleaning),
  6451   _yield(should_yield),
  6452   _concurrent_precleaning(concurrent_precleaning),
  6453   _freelistLock(NULL)
  6455   _ref_processor = rp;
  6456   assert(_ref_processor != NULL, "_ref_processor shouldn't be NULL");
  6459 // This closure is used to mark refs into the CMS generation at the
  6460 // second (final) checkpoint, and to scan and transitively follow
  6461 // the unmarked oops. It is also used during the concurrent precleaning
  6462 // phase while scanning objects on dirty cards in the CMS generation.
  6463 // The marks are made in the marking bit map and the marking stack is
  6464 // used for keeping the (newly) grey objects during the scan.
  6465 // The parallel version (Par_...) appears further below.
  6466 void MarkRefsIntoAndScanClosure::do_oop(oop obj) {
  6467   if (obj != NULL) {
  6468     assert(obj->is_oop(), "expected an oop");
  6469     HeapWord* addr = (HeapWord*)obj;
  6470     assert(_mark_stack->isEmpty(), "pre-condition (eager drainage)");
  6471     assert(_collector->overflow_list_is_empty(),
  6472            "overflow list should be empty");
  6473     if (_span.contains(addr) &&
  6474         !_bit_map->isMarked(addr)) {
  6475       // mark bit map (object is now grey)
  6476       _bit_map->mark(addr);
  6477       // push on marking stack (stack should be empty), and drain the
  6478       // stack by applying this closure to the oops in the oops popped
  6479       // from the stack (i.e. blacken the grey objects)
  6480       bool res = _mark_stack->push(obj);
  6481       assert(res, "Should have space to push on empty stack");
  6482       do {
  6483         oop new_oop = _mark_stack->pop();
  6484         assert(new_oop != NULL && new_oop->is_oop(), "Expected an oop");
  6485         assert(new_oop->is_parsable(), "Found unparsable oop");
  6486         assert(_bit_map->isMarked((HeapWord*)new_oop),
  6487                "only grey objects on this stack");
  6488         // iterate over the oops in this oop, marking and pushing
  6489         // the ones in CMS heap (i.e. in _span).
  6490         new_oop->oop_iterate(&_pushAndMarkClosure);
  6491         // check if it's time to yield
  6492         do_yield_check();
  6493       } while (!_mark_stack->isEmpty() ||
  6494                (!_concurrent_precleaning && take_from_overflow_list()));
  6495         // if marking stack is empty, and we are not doing this
  6496         // during precleaning, then check the overflow list
  6498     assert(_mark_stack->isEmpty(), "post-condition (eager drainage)");
  6499     assert(_collector->overflow_list_is_empty(),
  6500            "overflow list was drained above");
  6501     // We could restore evacuated mark words, if any, used for
  6502     // overflow list links here because the overflow list is
  6503     // provably empty here. That would reduce the maximum
  6504     // size requirements for preserved_{oop,mark}_stack.
  6505     // But we'll just postpone it until we are all done
  6506     // so we can just stream through.
  6507     if (!_concurrent_precleaning && CMSOverflowEarlyRestoration) {
  6508       _collector->restore_preserved_marks_if_any();
  6509       assert(_collector->no_preserved_marks(), "No preserved marks");
  6511     assert(!CMSOverflowEarlyRestoration || _collector->no_preserved_marks(),
  6512            "All preserved marks should have been restored above");
  6516 void MarkRefsIntoAndScanClosure::do_oop(oop* p)       { MarkRefsIntoAndScanClosure::do_oop_work(p); }
  6517 void MarkRefsIntoAndScanClosure::do_oop(narrowOop* p) { MarkRefsIntoAndScanClosure::do_oop_work(p); }
  6519 void MarkRefsIntoAndScanClosure::do_yield_work() {
  6520   assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  6521          "CMS thread should hold CMS token");
  6522   assert_lock_strong(_freelistLock);
  6523   assert_lock_strong(_bit_map->lock());
  6524   // relinquish the free_list_lock and bitMaplock()
  6525   _bit_map->lock()->unlock();
  6526   _freelistLock->unlock();
  6527   ConcurrentMarkSweepThread::desynchronize(true);
  6528   ConcurrentMarkSweepThread::acknowledge_yield_request();
  6529   _collector->stopTimer();
  6530   GCPauseTimer p(_collector->size_policy()->concurrent_timer_ptr());
  6531   if (PrintCMSStatistics != 0) {
  6532     _collector->incrementYields();
  6534   _collector->icms_wait();
  6536   // See the comment in coordinator_yield()
  6537   for (unsigned i = 0;
  6538        i < CMSYieldSleepCount &&
  6539        ConcurrentMarkSweepThread::should_yield() &&
  6540        !CMSCollector::foregroundGCIsActive();
  6541        ++i) {
  6542     os::sleep(Thread::current(), 1, false);
  6543     ConcurrentMarkSweepThread::acknowledge_yield_request();
  6546   ConcurrentMarkSweepThread::synchronize(true);
  6547   _freelistLock->lock_without_safepoint_check();
  6548   _bit_map->lock()->lock_without_safepoint_check();
  6549   _collector->startTimer();
  6552 ///////////////////////////////////////////////////////////
  6553 // Par_MarkRefsIntoAndScanClosure: a parallel version of
  6554 //                                 MarkRefsIntoAndScanClosure
  6555 ///////////////////////////////////////////////////////////
  6556 Par_MarkRefsIntoAndScanClosure::Par_MarkRefsIntoAndScanClosure(
  6557   CMSCollector* collector, MemRegion span, ReferenceProcessor* rp,
  6558   CMSBitMap* bit_map, OopTaskQueue* work_queue, CMSMarkStack*  revisit_stack):
  6559   _span(span),
  6560   _bit_map(bit_map),
  6561   _work_queue(work_queue),
  6562   _low_water_mark(MIN2((uint)(work_queue->max_elems()/4),
  6563                        (uint)(CMSWorkQueueDrainThreshold * ParallelGCThreads))),
  6564   _par_pushAndMarkClosure(collector, span, rp, bit_map, work_queue,
  6565                           revisit_stack)
  6567   _ref_processor = rp;
  6568   assert(_ref_processor != NULL, "_ref_processor shouldn't be NULL");
  6571 // This closure is used to mark refs into the CMS generation at the
  6572 // second (final) checkpoint, and to scan and transitively follow
  6573 // the unmarked oops. The marks are made in the marking bit map and
  6574 // the work_queue is used for keeping the (newly) grey objects during
  6575 // the scan phase whence they are also available for stealing by parallel
  6576 // threads. Since the marking bit map is shared, updates are
  6577 // synchronized (via CAS).
  6578 void Par_MarkRefsIntoAndScanClosure::do_oop(oop obj) {
  6579   if (obj != NULL) {
  6580     // Ignore mark word because this could be an already marked oop
  6581     // that may be chained at the end of the overflow list.
  6582     assert(obj->is_oop(true), "expected an oop");
  6583     HeapWord* addr = (HeapWord*)obj;
  6584     if (_span.contains(addr) &&
  6585         !_bit_map->isMarked(addr)) {
  6586       // mark bit map (object will become grey):
  6587       // It is possible for several threads to be
  6588       // trying to "claim" this object concurrently;
  6589       // the unique thread that succeeds in marking the
  6590       // object first will do the subsequent push on
  6591       // to the work queue (or overflow list).
  6592       if (_bit_map->par_mark(addr)) {
  6593         // push on work_queue (which may not be empty), and trim the
  6594         // queue to an appropriate length by applying this closure to
  6595         // the oops in the oops popped from the stack (i.e. blacken the
  6596         // grey objects)
  6597         bool res = _work_queue->push(obj);
  6598         assert(res, "Low water mark should be less than capacity?");
  6599         trim_queue(_low_water_mark);
  6600       } // Else, another thread claimed the object
  6605 void Par_MarkRefsIntoAndScanClosure::do_oop(oop* p)       { Par_MarkRefsIntoAndScanClosure::do_oop_work(p); }
  6606 void Par_MarkRefsIntoAndScanClosure::do_oop(narrowOop* p) { Par_MarkRefsIntoAndScanClosure::do_oop_work(p); }
  6608 // This closure is used to rescan the marked objects on the dirty cards
  6609 // in the mod union table and the card table proper.
  6610 size_t ScanMarkedObjectsAgainCarefullyClosure::do_object_careful_m(
  6611   oop p, MemRegion mr) {
  6613   size_t size = 0;
  6614   HeapWord* addr = (HeapWord*)p;
  6615   DEBUG_ONLY(_collector->verify_work_stacks_empty();)
  6616   assert(_span.contains(addr), "we are scanning the CMS generation");
  6617   // check if it's time to yield
  6618   if (do_yield_check()) {
  6619     // We yielded for some foreground stop-world work,
  6620     // and we have been asked to abort this ongoing preclean cycle.
  6621     return 0;
  6623   if (_bitMap->isMarked(addr)) {
  6624     // it's marked; is it potentially uninitialized?
  6625     if (p->klass_or_null() != NULL) {
  6626       if (CMSPermGenPrecleaningEnabled && !p->is_parsable()) {
  6627         // Signal precleaning to redirty the card since
  6628         // the klass pointer is already installed.
  6629         assert(size == 0, "Initial value");
  6630       } else {
  6631         assert(p->is_parsable(), "must be parsable.");
  6632         // an initialized object; ignore mark word in verification below
  6633         // since we are running concurrent with mutators
  6634         assert(p->is_oop(true), "should be an oop");
  6635         if (p->is_objArray()) {
  6636           // objArrays are precisely marked; restrict scanning
  6637           // to dirty cards only.
  6638           size = CompactibleFreeListSpace::adjustObjectSize(
  6639                    p->oop_iterate(_scanningClosure, mr));
  6640         } else {
  6641           // A non-array may have been imprecisely marked; we need
  6642           // to scan object in its entirety.
  6643           size = CompactibleFreeListSpace::adjustObjectSize(
  6644                    p->oop_iterate(_scanningClosure));
  6646         #ifdef DEBUG
  6647           size_t direct_size =
  6648             CompactibleFreeListSpace::adjustObjectSize(p->size());
  6649           assert(size == direct_size, "Inconsistency in size");
  6650           assert(size >= 3, "Necessary for Printezis marks to work");
  6651           if (!_bitMap->isMarked(addr+1)) {
  6652             _bitMap->verifyNoOneBitsInRange(addr+2, addr+size);
  6653           } else {
  6654             _bitMap->verifyNoOneBitsInRange(addr+2, addr+size-1);
  6655             assert(_bitMap->isMarked(addr+size-1),
  6656                    "inconsistent Printezis mark");
  6658         #endif // DEBUG
  6660     } else {
  6661       // an unitialized object
  6662       assert(_bitMap->isMarked(addr+1), "missing Printezis mark?");
  6663       HeapWord* nextOneAddr = _bitMap->getNextMarkedWordAddress(addr + 2);
  6664       size = pointer_delta(nextOneAddr + 1, addr);
  6665       assert(size == CompactibleFreeListSpace::adjustObjectSize(size),
  6666              "alignment problem");
  6667       // Note that pre-cleaning needn't redirty the card. OopDesc::set_klass()
  6668       // will dirty the card when the klass pointer is installed in the
  6669       // object (signalling the completion of initialization).
  6671   } else {
  6672     // Either a not yet marked object or an uninitialized object
  6673     if (p->klass_or_null() == NULL || !p->is_parsable()) {
  6674       // An uninitialized object, skip to the next card, since
  6675       // we may not be able to read its P-bits yet.
  6676       assert(size == 0, "Initial value");
  6677     } else {
  6678       // An object not (yet) reached by marking: we merely need to
  6679       // compute its size so as to go look at the next block.
  6680       assert(p->is_oop(true), "should be an oop");
  6681       size = CompactibleFreeListSpace::adjustObjectSize(p->size());
  6684   DEBUG_ONLY(_collector->verify_work_stacks_empty();)
  6685   return size;
  6688 void ScanMarkedObjectsAgainCarefullyClosure::do_yield_work() {
  6689   assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  6690          "CMS thread should hold CMS token");
  6691   assert_lock_strong(_freelistLock);
  6692   assert_lock_strong(_bitMap->lock());
  6693   // relinquish the free_list_lock and bitMaplock()
  6694   _bitMap->lock()->unlock();
  6695   _freelistLock->unlock();
  6696   ConcurrentMarkSweepThread::desynchronize(true);
  6697   ConcurrentMarkSweepThread::acknowledge_yield_request();
  6698   _collector->stopTimer();
  6699   GCPauseTimer p(_collector->size_policy()->concurrent_timer_ptr());
  6700   if (PrintCMSStatistics != 0) {
  6701     _collector->incrementYields();
  6703   _collector->icms_wait();
  6705   // See the comment in coordinator_yield()
  6706   for (unsigned i = 0; i < CMSYieldSleepCount &&
  6707                    ConcurrentMarkSweepThread::should_yield() &&
  6708                    !CMSCollector::foregroundGCIsActive(); ++i) {
  6709     os::sleep(Thread::current(), 1, false);
  6710     ConcurrentMarkSweepThread::acknowledge_yield_request();
  6713   ConcurrentMarkSweepThread::synchronize(true);
  6714   _freelistLock->lock_without_safepoint_check();
  6715   _bitMap->lock()->lock_without_safepoint_check();
  6716   _collector->startTimer();
  6720 //////////////////////////////////////////////////////////////////
  6721 // SurvivorSpacePrecleanClosure
  6722 //////////////////////////////////////////////////////////////////
  6723 // This (single-threaded) closure is used to preclean the oops in
  6724 // the survivor spaces.
  6725 size_t SurvivorSpacePrecleanClosure::do_object_careful(oop p) {
  6727   HeapWord* addr = (HeapWord*)p;
  6728   DEBUG_ONLY(_collector->verify_work_stacks_empty();)
  6729   assert(!_span.contains(addr), "we are scanning the survivor spaces");
  6730   assert(p->klass_or_null() != NULL, "object should be initializd");
  6731   assert(p->is_parsable(), "must be parsable.");
  6732   // an initialized object; ignore mark word in verification below
  6733   // since we are running concurrent with mutators
  6734   assert(p->is_oop(true), "should be an oop");
  6735   // Note that we do not yield while we iterate over
  6736   // the interior oops of p, pushing the relevant ones
  6737   // on our marking stack.
  6738   size_t size = p->oop_iterate(_scanning_closure);
  6739   do_yield_check();
  6740   // Observe that below, we do not abandon the preclean
  6741   // phase as soon as we should; rather we empty the
  6742   // marking stack before returning. This is to satisfy
  6743   // some existing assertions. In general, it may be a
  6744   // good idea to abort immediately and complete the marking
  6745   // from the grey objects at a later time.
  6746   while (!_mark_stack->isEmpty()) {
  6747     oop new_oop = _mark_stack->pop();
  6748     assert(new_oop != NULL && new_oop->is_oop(), "Expected an oop");
  6749     assert(new_oop->is_parsable(), "Found unparsable oop");
  6750     assert(_bit_map->isMarked((HeapWord*)new_oop),
  6751            "only grey objects on this stack");
  6752     // iterate over the oops in this oop, marking and pushing
  6753     // the ones in CMS heap (i.e. in _span).
  6754     new_oop->oop_iterate(_scanning_closure);
  6755     // check if it's time to yield
  6756     do_yield_check();
  6758   unsigned int after_count =
  6759     GenCollectedHeap::heap()->total_collections();
  6760   bool abort = (_before_count != after_count) ||
  6761                _collector->should_abort_preclean();
  6762   return abort ? 0 : size;
  6765 void SurvivorSpacePrecleanClosure::do_yield_work() {
  6766   assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  6767          "CMS thread should hold CMS token");
  6768   assert_lock_strong(_bit_map->lock());
  6769   // Relinquish the bit map lock
  6770   _bit_map->lock()->unlock();
  6771   ConcurrentMarkSweepThread::desynchronize(true);
  6772   ConcurrentMarkSweepThread::acknowledge_yield_request();
  6773   _collector->stopTimer();
  6774   GCPauseTimer p(_collector->size_policy()->concurrent_timer_ptr());
  6775   if (PrintCMSStatistics != 0) {
  6776     _collector->incrementYields();
  6778   _collector->icms_wait();
  6780   // See the comment in coordinator_yield()
  6781   for (unsigned i = 0; i < CMSYieldSleepCount &&
  6782                        ConcurrentMarkSweepThread::should_yield() &&
  6783                        !CMSCollector::foregroundGCIsActive(); ++i) {
  6784     os::sleep(Thread::current(), 1, false);
  6785     ConcurrentMarkSweepThread::acknowledge_yield_request();
  6788   ConcurrentMarkSweepThread::synchronize(true);
  6789   _bit_map->lock()->lock_without_safepoint_check();
  6790   _collector->startTimer();
  6793 // This closure is used to rescan the marked objects on the dirty cards
  6794 // in the mod union table and the card table proper. In the parallel
  6795 // case, although the bitMap is shared, we do a single read so the
  6796 // isMarked() query is "safe".
  6797 bool ScanMarkedObjectsAgainClosure::do_object_bm(oop p, MemRegion mr) {
  6798   // Ignore mark word because we are running concurrent with mutators
  6799   assert(p->is_oop_or_null(true), "expected an oop or null");
  6800   HeapWord* addr = (HeapWord*)p;
  6801   assert(_span.contains(addr), "we are scanning the CMS generation");
  6802   bool is_obj_array = false;
  6803   #ifdef DEBUG
  6804     if (!_parallel) {
  6805       assert(_mark_stack->isEmpty(), "pre-condition (eager drainage)");
  6806       assert(_collector->overflow_list_is_empty(),
  6807              "overflow list should be empty");
  6810   #endif // DEBUG
  6811   if (_bit_map->isMarked(addr)) {
  6812     // Obj arrays are precisely marked, non-arrays are not;
  6813     // so we scan objArrays precisely and non-arrays in their
  6814     // entirety.
  6815     if (p->is_objArray()) {
  6816       is_obj_array = true;
  6817       if (_parallel) {
  6818         p->oop_iterate(_par_scan_closure, mr);
  6819       } else {
  6820         p->oop_iterate(_scan_closure, mr);
  6822     } else {
  6823       if (_parallel) {
  6824         p->oop_iterate(_par_scan_closure);
  6825       } else {
  6826         p->oop_iterate(_scan_closure);
  6830   #ifdef DEBUG
  6831     if (!_parallel) {
  6832       assert(_mark_stack->isEmpty(), "post-condition (eager drainage)");
  6833       assert(_collector->overflow_list_is_empty(),
  6834              "overflow list should be empty");
  6837   #endif // DEBUG
  6838   return is_obj_array;
  6841 MarkFromRootsClosure::MarkFromRootsClosure(CMSCollector* collector,
  6842                         MemRegion span,
  6843                         CMSBitMap* bitMap, CMSMarkStack*  markStack,
  6844                         CMSMarkStack*  revisitStack,
  6845                         bool should_yield, bool verifying):
  6846   _collector(collector),
  6847   _span(span),
  6848   _bitMap(bitMap),
  6849   _mut(&collector->_modUnionTable),
  6850   _markStack(markStack),
  6851   _revisitStack(revisitStack),
  6852   _yield(should_yield),
  6853   _skipBits(0)
  6855   assert(_markStack->isEmpty(), "stack should be empty");
  6856   _finger = _bitMap->startWord();
  6857   _threshold = _finger;
  6858   assert(_collector->_restart_addr == NULL, "Sanity check");
  6859   assert(_span.contains(_finger), "Out of bounds _finger?");
  6860   DEBUG_ONLY(_verifying = verifying;)
  6863 void MarkFromRootsClosure::reset(HeapWord* addr) {
  6864   assert(_markStack->isEmpty(), "would cause duplicates on stack");
  6865   assert(_span.contains(addr), "Out of bounds _finger?");
  6866   _finger = addr;
  6867   _threshold = (HeapWord*)round_to(
  6868                  (intptr_t)_finger, CardTableModRefBS::card_size);
  6871 // Should revisit to see if this should be restructured for
  6872 // greater efficiency.
  6873 bool MarkFromRootsClosure::do_bit(size_t offset) {
  6874   if (_skipBits > 0) {
  6875     _skipBits--;
  6876     return true;
  6878   // convert offset into a HeapWord*
  6879   HeapWord* addr = _bitMap->startWord() + offset;
  6880   assert(_bitMap->endWord() && addr < _bitMap->endWord(),
  6881          "address out of range");
  6882   assert(_bitMap->isMarked(addr), "tautology");
  6883   if (_bitMap->isMarked(addr+1)) {
  6884     // this is an allocated but not yet initialized object
  6885     assert(_skipBits == 0, "tautology");
  6886     _skipBits = 2;  // skip next two marked bits ("Printezis-marks")
  6887     oop p = oop(addr);
  6888     if (p->klass_or_null() == NULL || !p->is_parsable()) {
  6889       DEBUG_ONLY(if (!_verifying) {)
  6890         // We re-dirty the cards on which this object lies and increase
  6891         // the _threshold so that we'll come back to scan this object
  6892         // during the preclean or remark phase. (CMSCleanOnEnter)
  6893         if (CMSCleanOnEnter) {
  6894           size_t sz = _collector->block_size_using_printezis_bits(addr);
  6895           HeapWord* end_card_addr   = (HeapWord*)round_to(
  6896                                          (intptr_t)(addr+sz), CardTableModRefBS::card_size);
  6897           MemRegion redirty_range = MemRegion(addr, end_card_addr);
  6898           assert(!redirty_range.is_empty(), "Arithmetical tautology");
  6899           // Bump _threshold to end_card_addr; note that
  6900           // _threshold cannot possibly exceed end_card_addr, anyhow.
  6901           // This prevents future clearing of the card as the scan proceeds
  6902           // to the right.
  6903           assert(_threshold <= end_card_addr,
  6904                  "Because we are just scanning into this object");
  6905           if (_threshold < end_card_addr) {
  6906             _threshold = end_card_addr;
  6908           if (p->klass_or_null() != NULL) {
  6909             // Redirty the range of cards...
  6910             _mut->mark_range(redirty_range);
  6911           } // ...else the setting of klass will dirty the card anyway.
  6913       DEBUG_ONLY(})
  6914       return true;
  6917   scanOopsInOop(addr);
  6918   return true;
  6921 // We take a break if we've been at this for a while,
  6922 // so as to avoid monopolizing the locks involved.
  6923 void MarkFromRootsClosure::do_yield_work() {
  6924   // First give up the locks, then yield, then re-lock
  6925   // We should probably use a constructor/destructor idiom to
  6926   // do this unlock/lock or modify the MutexUnlocker class to
  6927   // serve our purpose. XXX
  6928   assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  6929          "CMS thread should hold CMS token");
  6930   assert_lock_strong(_bitMap->lock());
  6931   _bitMap->lock()->unlock();
  6932   ConcurrentMarkSweepThread::desynchronize(true);
  6933   ConcurrentMarkSweepThread::acknowledge_yield_request();
  6934   _collector->stopTimer();
  6935   GCPauseTimer p(_collector->size_policy()->concurrent_timer_ptr());
  6936   if (PrintCMSStatistics != 0) {
  6937     _collector->incrementYields();
  6939   _collector->icms_wait();
  6941   // See the comment in coordinator_yield()
  6942   for (unsigned i = 0; i < CMSYieldSleepCount &&
  6943                        ConcurrentMarkSweepThread::should_yield() &&
  6944                        !CMSCollector::foregroundGCIsActive(); ++i) {
  6945     os::sleep(Thread::current(), 1, false);
  6946     ConcurrentMarkSweepThread::acknowledge_yield_request();
  6949   ConcurrentMarkSweepThread::synchronize(true);
  6950   _bitMap->lock()->lock_without_safepoint_check();
  6951   _collector->startTimer();
  6954 void MarkFromRootsClosure::scanOopsInOop(HeapWord* ptr) {
  6955   assert(_bitMap->isMarked(ptr), "expected bit to be set");
  6956   assert(_markStack->isEmpty(),
  6957          "should drain stack to limit stack usage");
  6958   // convert ptr to an oop preparatory to scanning
  6959   oop obj = oop(ptr);
  6960   // Ignore mark word in verification below, since we
  6961   // may be running concurrent with mutators.
  6962   assert(obj->is_oop(true), "should be an oop");
  6963   assert(_finger <= ptr, "_finger runneth ahead");
  6964   // advance the finger to right end of this object
  6965   _finger = ptr + obj->size();
  6966   assert(_finger > ptr, "we just incremented it above");
  6967   // On large heaps, it may take us some time to get through
  6968   // the marking phase (especially if running iCMS). During
  6969   // this time it's possible that a lot of mutations have
  6970   // accumulated in the card table and the mod union table --
  6971   // these mutation records are redundant until we have
  6972   // actually traced into the corresponding card.
  6973   // Here, we check whether advancing the finger would make
  6974   // us cross into a new card, and if so clear corresponding
  6975   // cards in the MUT (preclean them in the card-table in the
  6976   // future).
  6978   DEBUG_ONLY(if (!_verifying) {)
  6979     // The clean-on-enter optimization is disabled by default,
  6980     // until we fix 6178663.
  6981     if (CMSCleanOnEnter && (_finger > _threshold)) {
  6982       // [_threshold, _finger) represents the interval
  6983       // of cards to be cleared  in MUT (or precleaned in card table).
  6984       // The set of cards to be cleared is all those that overlap
  6985       // with the interval [_threshold, _finger); note that
  6986       // _threshold is always kept card-aligned but _finger isn't
  6987       // always card-aligned.
  6988       HeapWord* old_threshold = _threshold;
  6989       assert(old_threshold == (HeapWord*)round_to(
  6990               (intptr_t)old_threshold, CardTableModRefBS::card_size),
  6991              "_threshold should always be card-aligned");
  6992       _threshold = (HeapWord*)round_to(
  6993                      (intptr_t)_finger, CardTableModRefBS::card_size);
  6994       MemRegion mr(old_threshold, _threshold);
  6995       assert(!mr.is_empty(), "Control point invariant");
  6996       assert(_span.contains(mr), "Should clear within span");
  6997       // XXX When _finger crosses from old gen into perm gen
  6998       // we may be doing unnecessary cleaning; do better in the
  6999       // future by detecting that condition and clearing fewer
  7000       // MUT/CT entries.
  7001       _mut->clear_range(mr);
  7003   DEBUG_ONLY(})
  7005   // Note: the finger doesn't advance while we drain
  7006   // the stack below.
  7007   PushOrMarkClosure pushOrMarkClosure(_collector,
  7008                                       _span, _bitMap, _markStack,
  7009                                       _revisitStack,
  7010                                       _finger, this);
  7011   bool res = _markStack->push(obj);
  7012   assert(res, "Empty non-zero size stack should have space for single push");
  7013   while (!_markStack->isEmpty()) {
  7014     oop new_oop = _markStack->pop();
  7015     // Skip verifying header mark word below because we are
  7016     // running concurrent with mutators.
  7017     assert(new_oop->is_oop(true), "Oops! expected to pop an oop");
  7018     // now scan this oop's oops
  7019     new_oop->oop_iterate(&pushOrMarkClosure);
  7020     do_yield_check();
  7022   assert(_markStack->isEmpty(), "tautology, emphasizing post-condition");
  7025 Par_MarkFromRootsClosure::Par_MarkFromRootsClosure(CMSConcMarkingTask* task,
  7026                        CMSCollector* collector, MemRegion span,
  7027                        CMSBitMap* bit_map,
  7028                        OopTaskQueue* work_queue,
  7029                        CMSMarkStack*  overflow_stack,
  7030                        CMSMarkStack*  revisit_stack,
  7031                        bool should_yield):
  7032   _collector(collector),
  7033   _whole_span(collector->_span),
  7034   _span(span),
  7035   _bit_map(bit_map),
  7036   _mut(&collector->_modUnionTable),
  7037   _work_queue(work_queue),
  7038   _overflow_stack(overflow_stack),
  7039   _revisit_stack(revisit_stack),
  7040   _yield(should_yield),
  7041   _skip_bits(0),
  7042   _task(task)
  7044   assert(_work_queue->size() == 0, "work_queue should be empty");
  7045   _finger = span.start();
  7046   _threshold = _finger;     // XXX Defer clear-on-enter optimization for now
  7047   assert(_span.contains(_finger), "Out of bounds _finger?");
  7050 // Should revisit to see if this should be restructured for
  7051 // greater efficiency.
  7052 bool Par_MarkFromRootsClosure::do_bit(size_t offset) {
  7053   if (_skip_bits > 0) {
  7054     _skip_bits--;
  7055     return true;
  7057   // convert offset into a HeapWord*
  7058   HeapWord* addr = _bit_map->startWord() + offset;
  7059   assert(_bit_map->endWord() && addr < _bit_map->endWord(),
  7060          "address out of range");
  7061   assert(_bit_map->isMarked(addr), "tautology");
  7062   if (_bit_map->isMarked(addr+1)) {
  7063     // this is an allocated object that might not yet be initialized
  7064     assert(_skip_bits == 0, "tautology");
  7065     _skip_bits = 2;  // skip next two marked bits ("Printezis-marks")
  7066     oop p = oop(addr);
  7067     if (p->klass_or_null() == NULL || !p->is_parsable()) {
  7068       // in the case of Clean-on-Enter optimization, redirty card
  7069       // and avoid clearing card by increasing  the threshold.
  7070       return true;
  7073   scan_oops_in_oop(addr);
  7074   return true;
  7077 void Par_MarkFromRootsClosure::scan_oops_in_oop(HeapWord* ptr) {
  7078   assert(_bit_map->isMarked(ptr), "expected bit to be set");
  7079   // Should we assert that our work queue is empty or
  7080   // below some drain limit?
  7081   assert(_work_queue->size() == 0,
  7082          "should drain stack to limit stack usage");
  7083   // convert ptr to an oop preparatory to scanning
  7084   oop obj = oop(ptr);
  7085   // Ignore mark word in verification below, since we
  7086   // may be running concurrent with mutators.
  7087   assert(obj->is_oop(true), "should be an oop");
  7088   assert(_finger <= ptr, "_finger runneth ahead");
  7089   // advance the finger to right end of this object
  7090   _finger = ptr + obj->size();
  7091   assert(_finger > ptr, "we just incremented it above");
  7092   // On large heaps, it may take us some time to get through
  7093   // the marking phase (especially if running iCMS). During
  7094   // this time it's possible that a lot of mutations have
  7095   // accumulated in the card table and the mod union table --
  7096   // these mutation records are redundant until we have
  7097   // actually traced into the corresponding card.
  7098   // Here, we check whether advancing the finger would make
  7099   // us cross into a new card, and if so clear corresponding
  7100   // cards in the MUT (preclean them in the card-table in the
  7101   // future).
  7103   // The clean-on-enter optimization is disabled by default,
  7104   // until we fix 6178663.
  7105   if (CMSCleanOnEnter && (_finger > _threshold)) {
  7106     // [_threshold, _finger) represents the interval
  7107     // of cards to be cleared  in MUT (or precleaned in card table).
  7108     // The set of cards to be cleared is all those that overlap
  7109     // with the interval [_threshold, _finger); note that
  7110     // _threshold is always kept card-aligned but _finger isn't
  7111     // always card-aligned.
  7112     HeapWord* old_threshold = _threshold;
  7113     assert(old_threshold == (HeapWord*)round_to(
  7114             (intptr_t)old_threshold, CardTableModRefBS::card_size),
  7115            "_threshold should always be card-aligned");
  7116     _threshold = (HeapWord*)round_to(
  7117                    (intptr_t)_finger, CardTableModRefBS::card_size);
  7118     MemRegion mr(old_threshold, _threshold);
  7119     assert(!mr.is_empty(), "Control point invariant");
  7120     assert(_span.contains(mr), "Should clear within span"); // _whole_span ??
  7121     // XXX When _finger crosses from old gen into perm gen
  7122     // we may be doing unnecessary cleaning; do better in the
  7123     // future by detecting that condition and clearing fewer
  7124     // MUT/CT entries.
  7125     _mut->clear_range(mr);
  7128   // Note: the local finger doesn't advance while we drain
  7129   // the stack below, but the global finger sure can and will.
  7130   HeapWord** gfa = _task->global_finger_addr();
  7131   Par_PushOrMarkClosure pushOrMarkClosure(_collector,
  7132                                       _span, _bit_map,
  7133                                       _work_queue,
  7134                                       _overflow_stack,
  7135                                       _revisit_stack,
  7136                                       _finger,
  7137                                       gfa, this);
  7138   bool res = _work_queue->push(obj);   // overflow could occur here
  7139   assert(res, "Will hold once we use workqueues");
  7140   while (true) {
  7141     oop new_oop;
  7142     if (!_work_queue->pop_local(new_oop)) {
  7143       // We emptied our work_queue; check if there's stuff that can
  7144       // be gotten from the overflow stack.
  7145       if (CMSConcMarkingTask::get_work_from_overflow_stack(
  7146             _overflow_stack, _work_queue)) {
  7147         do_yield_check();
  7148         continue;
  7149       } else {  // done
  7150         break;
  7153     // Skip verifying header mark word below because we are
  7154     // running concurrent with mutators.
  7155     assert(new_oop->is_oop(true), "Oops! expected to pop an oop");
  7156     // now scan this oop's oops
  7157     new_oop->oop_iterate(&pushOrMarkClosure);
  7158     do_yield_check();
  7160   assert(_work_queue->size() == 0, "tautology, emphasizing post-condition");
  7163 // Yield in response to a request from VM Thread or
  7164 // from mutators.
  7165 void Par_MarkFromRootsClosure::do_yield_work() {
  7166   assert(_task != NULL, "sanity");
  7167   _task->yield();
  7170 // A variant of the above used for verifying CMS marking work.
  7171 MarkFromRootsVerifyClosure::MarkFromRootsVerifyClosure(CMSCollector* collector,
  7172                         MemRegion span,
  7173                         CMSBitMap* verification_bm, CMSBitMap* cms_bm,
  7174                         CMSMarkStack*  mark_stack):
  7175   _collector(collector),
  7176   _span(span),
  7177   _verification_bm(verification_bm),
  7178   _cms_bm(cms_bm),
  7179   _mark_stack(mark_stack),
  7180   _pam_verify_closure(collector, span, verification_bm, cms_bm,
  7181                       mark_stack)
  7183   assert(_mark_stack->isEmpty(), "stack should be empty");
  7184   _finger = _verification_bm->startWord();
  7185   assert(_collector->_restart_addr == NULL, "Sanity check");
  7186   assert(_span.contains(_finger), "Out of bounds _finger?");
  7189 void MarkFromRootsVerifyClosure::reset(HeapWord* addr) {
  7190   assert(_mark_stack->isEmpty(), "would cause duplicates on stack");
  7191   assert(_span.contains(addr), "Out of bounds _finger?");
  7192   _finger = addr;
  7195 // Should revisit to see if this should be restructured for
  7196 // greater efficiency.
  7197 bool MarkFromRootsVerifyClosure::do_bit(size_t offset) {
  7198   // convert offset into a HeapWord*
  7199   HeapWord* addr = _verification_bm->startWord() + offset;
  7200   assert(_verification_bm->endWord() && addr < _verification_bm->endWord(),
  7201          "address out of range");
  7202   assert(_verification_bm->isMarked(addr), "tautology");
  7203   assert(_cms_bm->isMarked(addr), "tautology");
  7205   assert(_mark_stack->isEmpty(),
  7206          "should drain stack to limit stack usage");
  7207   // convert addr to an oop preparatory to scanning
  7208   oop obj = oop(addr);
  7209   assert(obj->is_oop(), "should be an oop");
  7210   assert(_finger <= addr, "_finger runneth ahead");
  7211   // advance the finger to right end of this object
  7212   _finger = addr + obj->size();
  7213   assert(_finger > addr, "we just incremented it above");
  7214   // Note: the finger doesn't advance while we drain
  7215   // the stack below.
  7216   bool res = _mark_stack->push(obj);
  7217   assert(res, "Empty non-zero size stack should have space for single push");
  7218   while (!_mark_stack->isEmpty()) {
  7219     oop new_oop = _mark_stack->pop();
  7220     assert(new_oop->is_oop(), "Oops! expected to pop an oop");
  7221     // now scan this oop's oops
  7222     new_oop->oop_iterate(&_pam_verify_closure);
  7224   assert(_mark_stack->isEmpty(), "tautology, emphasizing post-condition");
  7225   return true;
  7228 PushAndMarkVerifyClosure::PushAndMarkVerifyClosure(
  7229   CMSCollector* collector, MemRegion span,
  7230   CMSBitMap* verification_bm, CMSBitMap* cms_bm,
  7231   CMSMarkStack*  mark_stack):
  7232   OopClosure(collector->ref_processor()),
  7233   _collector(collector),
  7234   _span(span),
  7235   _verification_bm(verification_bm),
  7236   _cms_bm(cms_bm),
  7237   _mark_stack(mark_stack)
  7238 { }
  7240 void PushAndMarkVerifyClosure::do_oop(oop* p)       { PushAndMarkVerifyClosure::do_oop_work(p); }
  7241 void PushAndMarkVerifyClosure::do_oop(narrowOop* p) { PushAndMarkVerifyClosure::do_oop_work(p); }
  7243 // Upon stack overflow, we discard (part of) the stack,
  7244 // remembering the least address amongst those discarded
  7245 // in CMSCollector's _restart_address.
  7246 void PushAndMarkVerifyClosure::handle_stack_overflow(HeapWord* lost) {
  7247   // Remember the least grey address discarded
  7248   HeapWord* ra = (HeapWord*)_mark_stack->least_value(lost);
  7249   _collector->lower_restart_addr(ra);
  7250   _mark_stack->reset();  // discard stack contents
  7251   _mark_stack->expand(); // expand the stack if possible
  7254 void PushAndMarkVerifyClosure::do_oop(oop obj) {
  7255   assert(obj->is_oop_or_null(), "expected an oop or NULL");
  7256   HeapWord* addr = (HeapWord*)obj;
  7257   if (_span.contains(addr) && !_verification_bm->isMarked(addr)) {
  7258     // Oop lies in _span and isn't yet grey or black
  7259     _verification_bm->mark(addr);            // now grey
  7260     if (!_cms_bm->isMarked(addr)) {
  7261       oop(addr)->print();
  7262       gclog_or_tty->print_cr(" (" INTPTR_FORMAT " should have been marked)",
  7263                              addr);
  7264       fatal("... aborting");
  7267     if (!_mark_stack->push(obj)) { // stack overflow
  7268       if (PrintCMSStatistics != 0) {
  7269         gclog_or_tty->print_cr("CMS marking stack overflow (benign) at "
  7270                                SIZE_FORMAT, _mark_stack->capacity());
  7272       assert(_mark_stack->isFull(), "Else push should have succeeded");
  7273       handle_stack_overflow(addr);
  7275     // anything including and to the right of _finger
  7276     // will be scanned as we iterate over the remainder of the
  7277     // bit map
  7281 PushOrMarkClosure::PushOrMarkClosure(CMSCollector* collector,
  7282                      MemRegion span,
  7283                      CMSBitMap* bitMap, CMSMarkStack*  markStack,
  7284                      CMSMarkStack*  revisitStack,
  7285                      HeapWord* finger, MarkFromRootsClosure* parent) :
  7286   OopClosure(collector->ref_processor()),
  7287   _collector(collector),
  7288   _span(span),
  7289   _bitMap(bitMap),
  7290   _markStack(markStack),
  7291   _revisitStack(revisitStack),
  7292   _finger(finger),
  7293   _parent(parent),
  7294   _should_remember_klasses(collector->should_unload_classes())
  7295 { }
  7297 Par_PushOrMarkClosure::Par_PushOrMarkClosure(CMSCollector* collector,
  7298                      MemRegion span,
  7299                      CMSBitMap* bit_map,
  7300                      OopTaskQueue* work_queue,
  7301                      CMSMarkStack*  overflow_stack,
  7302                      CMSMarkStack*  revisit_stack,
  7303                      HeapWord* finger,
  7304                      HeapWord** global_finger_addr,
  7305                      Par_MarkFromRootsClosure* parent) :
  7306   OopClosure(collector->ref_processor()),
  7307   _collector(collector),
  7308   _whole_span(collector->_span),
  7309   _span(span),
  7310   _bit_map(bit_map),
  7311   _work_queue(work_queue),
  7312   _overflow_stack(overflow_stack),
  7313   _revisit_stack(revisit_stack),
  7314   _finger(finger),
  7315   _global_finger_addr(global_finger_addr),
  7316   _parent(parent),
  7317   _should_remember_klasses(collector->should_unload_classes())
  7318 { }
  7320 // Assumes thread-safe access by callers, who are
  7321 // responsible for mutual exclusion.
  7322 void CMSCollector::lower_restart_addr(HeapWord* low) {
  7323   assert(_span.contains(low), "Out of bounds addr");
  7324   if (_restart_addr == NULL) {
  7325     _restart_addr = low;
  7326   } else {
  7327     _restart_addr = MIN2(_restart_addr, low);
  7331 // Upon stack overflow, we discard (part of) the stack,
  7332 // remembering the least address amongst those discarded
  7333 // in CMSCollector's _restart_address.
  7334 void PushOrMarkClosure::handle_stack_overflow(HeapWord* lost) {
  7335   // Remember the least grey address discarded
  7336   HeapWord* ra = (HeapWord*)_markStack->least_value(lost);
  7337   _collector->lower_restart_addr(ra);
  7338   _markStack->reset();  // discard stack contents
  7339   _markStack->expand(); // expand the stack if possible
  7342 // Upon stack overflow, we discard (part of) the stack,
  7343 // remembering the least address amongst those discarded
  7344 // in CMSCollector's _restart_address.
  7345 void Par_PushOrMarkClosure::handle_stack_overflow(HeapWord* lost) {
  7346   // We need to do this under a mutex to prevent other
  7347   // workers from interfering with the work done below.
  7348   MutexLockerEx ml(_overflow_stack->par_lock(),
  7349                    Mutex::_no_safepoint_check_flag);
  7350   // Remember the least grey address discarded
  7351   HeapWord* ra = (HeapWord*)_overflow_stack->least_value(lost);
  7352   _collector->lower_restart_addr(ra);
  7353   _overflow_stack->reset();  // discard stack contents
  7354   _overflow_stack->expand(); // expand the stack if possible
  7357 void PushOrMarkClosure::do_oop(oop obj) {
  7358   // Ignore mark word because we are running concurrent with mutators.
  7359   assert(obj->is_oop_or_null(true), "expected an oop or NULL");
  7360   HeapWord* addr = (HeapWord*)obj;
  7361   if (_span.contains(addr) && !_bitMap->isMarked(addr)) {
  7362     // Oop lies in _span and isn't yet grey or black
  7363     _bitMap->mark(addr);            // now grey
  7364     if (addr < _finger) {
  7365       // the bit map iteration has already either passed, or
  7366       // sampled, this bit in the bit map; we'll need to
  7367       // use the marking stack to scan this oop's oops.
  7368       bool simulate_overflow = false;
  7369       NOT_PRODUCT(
  7370         if (CMSMarkStackOverflowALot &&
  7371             _collector->simulate_overflow()) {
  7372           // simulate a stack overflow
  7373           simulate_overflow = true;
  7376       if (simulate_overflow || !_markStack->push(obj)) { // stack overflow
  7377         if (PrintCMSStatistics != 0) {
  7378           gclog_or_tty->print_cr("CMS marking stack overflow (benign) at "
  7379                                  SIZE_FORMAT, _markStack->capacity());
  7381         assert(simulate_overflow || _markStack->isFull(), "Else push should have succeeded");
  7382         handle_stack_overflow(addr);
  7385     // anything including and to the right of _finger
  7386     // will be scanned as we iterate over the remainder of the
  7387     // bit map
  7388     do_yield_check();
  7392 void PushOrMarkClosure::do_oop(oop* p)       { PushOrMarkClosure::do_oop_work(p); }
  7393 void PushOrMarkClosure::do_oop(narrowOop* p) { PushOrMarkClosure::do_oop_work(p); }
  7395 void Par_PushOrMarkClosure::do_oop(oop obj) {
  7396   // Ignore mark word because we are running concurrent with mutators.
  7397   assert(obj->is_oop_or_null(true), "expected an oop or NULL");
  7398   HeapWord* addr = (HeapWord*)obj;
  7399   if (_whole_span.contains(addr) && !_bit_map->isMarked(addr)) {
  7400     // Oop lies in _span and isn't yet grey or black
  7401     // We read the global_finger (volatile read) strictly after marking oop
  7402     bool res = _bit_map->par_mark(addr);    // now grey
  7403     volatile HeapWord** gfa = (volatile HeapWord**)_global_finger_addr;
  7404     // Should we push this marked oop on our stack?
  7405     // -- if someone else marked it, nothing to do
  7406     // -- if target oop is above global finger nothing to do
  7407     // -- if target oop is in chunk and above local finger
  7408     //      then nothing to do
  7409     // -- else push on work queue
  7410     if (   !res       // someone else marked it, they will deal with it
  7411         || (addr >= *gfa)  // will be scanned in a later task
  7412         || (_span.contains(addr) && addr >= _finger)) { // later in this chunk
  7413       return;
  7415     // the bit map iteration has already either passed, or
  7416     // sampled, this bit in the bit map; we'll need to
  7417     // use the marking stack to scan this oop's oops.
  7418     bool simulate_overflow = false;
  7419     NOT_PRODUCT(
  7420       if (CMSMarkStackOverflowALot &&
  7421           _collector->simulate_overflow()) {
  7422         // simulate a stack overflow
  7423         simulate_overflow = true;
  7426     if (simulate_overflow ||
  7427         !(_work_queue->push(obj) || _overflow_stack->par_push(obj))) {
  7428       // stack overflow
  7429       if (PrintCMSStatistics != 0) {
  7430         gclog_or_tty->print_cr("CMS marking stack overflow (benign) at "
  7431                                SIZE_FORMAT, _overflow_stack->capacity());
  7433       // We cannot assert that the overflow stack is full because
  7434       // it may have been emptied since.
  7435       assert(simulate_overflow ||
  7436              _work_queue->size() == _work_queue->max_elems(),
  7437             "Else push should have succeeded");
  7438       handle_stack_overflow(addr);
  7440     do_yield_check();
  7444 void Par_PushOrMarkClosure::do_oop(oop* p)       { Par_PushOrMarkClosure::do_oop_work(p); }
  7445 void Par_PushOrMarkClosure::do_oop(narrowOop* p) { Par_PushOrMarkClosure::do_oop_work(p); }
  7447 PushAndMarkClosure::PushAndMarkClosure(CMSCollector* collector,
  7448                                        MemRegion span,
  7449                                        ReferenceProcessor* rp,
  7450                                        CMSBitMap* bit_map,
  7451                                        CMSBitMap* mod_union_table,
  7452                                        CMSMarkStack*  mark_stack,
  7453                                        CMSMarkStack*  revisit_stack,
  7454                                        bool           concurrent_precleaning):
  7455   OopClosure(rp),
  7456   _collector(collector),
  7457   _span(span),
  7458   _bit_map(bit_map),
  7459   _mod_union_table(mod_union_table),
  7460   _mark_stack(mark_stack),
  7461   _revisit_stack(revisit_stack),
  7462   _concurrent_precleaning(concurrent_precleaning),
  7463   _should_remember_klasses(collector->should_unload_classes())
  7465   assert(_ref_processor != NULL, "_ref_processor shouldn't be NULL");
  7468 // Grey object rescan during pre-cleaning and second checkpoint phases --
  7469 // the non-parallel version (the parallel version appears further below.)
  7470 void PushAndMarkClosure::do_oop(oop obj) {
  7471   // Ignore mark word verification. If during concurrent precleaning,
  7472   // the object monitor may be locked. If during the checkpoint
  7473   // phases, the object may already have been reached by a  different
  7474   // path and may be at the end of the global overflow list (so
  7475   // the mark word may be NULL).
  7476   assert(obj->is_oop_or_null(true /* ignore mark word */),
  7477          "expected an oop or NULL");
  7478   HeapWord* addr = (HeapWord*)obj;
  7479   // Check if oop points into the CMS generation
  7480   // and is not marked
  7481   if (_span.contains(addr) && !_bit_map->isMarked(addr)) {
  7482     // a white object ...
  7483     _bit_map->mark(addr);         // ... now grey
  7484     // push on the marking stack (grey set)
  7485     bool simulate_overflow = false;
  7486     NOT_PRODUCT(
  7487       if (CMSMarkStackOverflowALot &&
  7488           _collector->simulate_overflow()) {
  7489         // simulate a stack overflow
  7490         simulate_overflow = true;
  7493     if (simulate_overflow || !_mark_stack->push(obj)) {
  7494       if (_concurrent_precleaning) {
  7495          // During precleaning we can just dirty the appropriate card(s)
  7496          // in the mod union table, thus ensuring that the object remains
  7497          // in the grey set  and continue. In the case of object arrays
  7498          // we need to dirty all of the cards that the object spans,
  7499          // since the rescan of object arrays will be limited to the
  7500          // dirty cards.
  7501          // Note that no one can be intefering with us in this action
  7502          // of dirtying the mod union table, so no locking or atomics
  7503          // are required.
  7504          if (obj->is_objArray()) {
  7505            size_t sz = obj->size();
  7506            HeapWord* end_card_addr = (HeapWord*)round_to(
  7507                                         (intptr_t)(addr+sz), CardTableModRefBS::card_size);
  7508            MemRegion redirty_range = MemRegion(addr, end_card_addr);
  7509            assert(!redirty_range.is_empty(), "Arithmetical tautology");
  7510            _mod_union_table->mark_range(redirty_range);
  7511          } else {
  7512            _mod_union_table->mark(addr);
  7514          _collector->_ser_pmc_preclean_ovflw++;
  7515       } else {
  7516          // During the remark phase, we need to remember this oop
  7517          // in the overflow list.
  7518          _collector->push_on_overflow_list(obj);
  7519          _collector->_ser_pmc_remark_ovflw++;
  7525 Par_PushAndMarkClosure::Par_PushAndMarkClosure(CMSCollector* collector,
  7526                                                MemRegion span,
  7527                                                ReferenceProcessor* rp,
  7528                                                CMSBitMap* bit_map,
  7529                                                OopTaskQueue* work_queue,
  7530                                                CMSMarkStack* revisit_stack):
  7531   OopClosure(rp),
  7532   _collector(collector),
  7533   _span(span),
  7534   _bit_map(bit_map),
  7535   _work_queue(work_queue),
  7536   _revisit_stack(revisit_stack),
  7537   _should_remember_klasses(collector->should_unload_classes())
  7539   assert(_ref_processor != NULL, "_ref_processor shouldn't be NULL");
  7542 void PushAndMarkClosure::do_oop(oop* p)       { PushAndMarkClosure::do_oop_work(p); }
  7543 void PushAndMarkClosure::do_oop(narrowOop* p) { PushAndMarkClosure::do_oop_work(p); }
  7545 // Grey object rescan during second checkpoint phase --
  7546 // the parallel version.
  7547 void Par_PushAndMarkClosure::do_oop(oop obj) {
  7548   // In the assert below, we ignore the mark word because
  7549   // this oop may point to an already visited object that is
  7550   // on the overflow stack (in which case the mark word has
  7551   // been hijacked for chaining into the overflow stack --
  7552   // if this is the last object in the overflow stack then
  7553   // its mark word will be NULL). Because this object may
  7554   // have been subsequently popped off the global overflow
  7555   // stack, and the mark word possibly restored to the prototypical
  7556   // value, by the time we get to examined this failing assert in
  7557   // the debugger, is_oop_or_null(false) may subsequently start
  7558   // to hold.
  7559   assert(obj->is_oop_or_null(true),
  7560          "expected an oop or NULL");
  7561   HeapWord* addr = (HeapWord*)obj;
  7562   // Check if oop points into the CMS generation
  7563   // and is not marked
  7564   if (_span.contains(addr) && !_bit_map->isMarked(addr)) {
  7565     // a white object ...
  7566     // If we manage to "claim" the object, by being the
  7567     // first thread to mark it, then we push it on our
  7568     // marking stack
  7569     if (_bit_map->par_mark(addr)) {     // ... now grey
  7570       // push on work queue (grey set)
  7571       bool simulate_overflow = false;
  7572       NOT_PRODUCT(
  7573         if (CMSMarkStackOverflowALot &&
  7574             _collector->par_simulate_overflow()) {
  7575           // simulate a stack overflow
  7576           simulate_overflow = true;
  7579       if (simulate_overflow || !_work_queue->push(obj)) {
  7580         _collector->par_push_on_overflow_list(obj);
  7581         _collector->_par_pmc_remark_ovflw++; //  imprecise OK: no need to CAS
  7583     } // Else, some other thread got there first
  7587 void Par_PushAndMarkClosure::do_oop(oop* p)       { Par_PushAndMarkClosure::do_oop_work(p); }
  7588 void Par_PushAndMarkClosure::do_oop(narrowOop* p) { Par_PushAndMarkClosure::do_oop_work(p); }
  7590 void PushAndMarkClosure::remember_klass(Klass* k) {
  7591   if (!_revisit_stack->push(oop(k))) {
  7592     fatal("Revisit stack overflowed in PushAndMarkClosure");
  7596 void Par_PushAndMarkClosure::remember_klass(Klass* k) {
  7597   if (!_revisit_stack->par_push(oop(k))) {
  7598     fatal("Revist stack overflowed in Par_PushAndMarkClosure");
  7602 void CMSPrecleanRefsYieldClosure::do_yield_work() {
  7603   Mutex* bml = _collector->bitMapLock();
  7604   assert_lock_strong(bml);
  7605   assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  7606          "CMS thread should hold CMS token");
  7608   bml->unlock();
  7609   ConcurrentMarkSweepThread::desynchronize(true);
  7611   ConcurrentMarkSweepThread::acknowledge_yield_request();
  7613   _collector->stopTimer();
  7614   GCPauseTimer p(_collector->size_policy()->concurrent_timer_ptr());
  7615   if (PrintCMSStatistics != 0) {
  7616     _collector->incrementYields();
  7618   _collector->icms_wait();
  7620   // See the comment in coordinator_yield()
  7621   for (unsigned i = 0; i < CMSYieldSleepCount &&
  7622                        ConcurrentMarkSweepThread::should_yield() &&
  7623                        !CMSCollector::foregroundGCIsActive(); ++i) {
  7624     os::sleep(Thread::current(), 1, false);
  7625     ConcurrentMarkSweepThread::acknowledge_yield_request();
  7628   ConcurrentMarkSweepThread::synchronize(true);
  7629   bml->lock();
  7631   _collector->startTimer();
  7634 bool CMSPrecleanRefsYieldClosure::should_return() {
  7635   if (ConcurrentMarkSweepThread::should_yield()) {
  7636     do_yield_work();
  7638   return _collector->foregroundGCIsActive();
  7641 void MarkFromDirtyCardsClosure::do_MemRegion(MemRegion mr) {
  7642   assert(((size_t)mr.start())%CardTableModRefBS::card_size_in_words == 0,
  7643          "mr should be aligned to start at a card boundary");
  7644   // We'd like to assert:
  7645   // assert(mr.word_size()%CardTableModRefBS::card_size_in_words == 0,
  7646   //        "mr should be a range of cards");
  7647   // However, that would be too strong in one case -- the last
  7648   // partition ends at _unallocated_block which, in general, can be
  7649   // an arbitrary boundary, not necessarily card aligned.
  7650   if (PrintCMSStatistics != 0) {
  7651     _num_dirty_cards +=
  7652          mr.word_size()/CardTableModRefBS::card_size_in_words;
  7654   _space->object_iterate_mem(mr, &_scan_cl);
  7657 SweepClosure::SweepClosure(CMSCollector* collector,
  7658                            ConcurrentMarkSweepGeneration* g,
  7659                            CMSBitMap* bitMap, bool should_yield) :
  7660   _collector(collector),
  7661   _g(g),
  7662   _sp(g->cmsSpace()),
  7663   _limit(_sp->sweep_limit()),
  7664   _freelistLock(_sp->freelistLock()),
  7665   _bitMap(bitMap),
  7666   _yield(should_yield),
  7667   _inFreeRange(false),           // No free range at beginning of sweep
  7668   _freeRangeInFreeLists(false),  // No free range at beginning of sweep
  7669   _lastFreeRangeCoalesced(false),
  7670   _freeFinger(g->used_region().start())
  7672   NOT_PRODUCT(
  7673     _numObjectsFreed = 0;
  7674     _numWordsFreed   = 0;
  7675     _numObjectsLive = 0;
  7676     _numWordsLive = 0;
  7677     _numObjectsAlreadyFree = 0;
  7678     _numWordsAlreadyFree = 0;
  7679     _last_fc = NULL;
  7681     _sp->initializeIndexedFreeListArrayReturnedBytes();
  7682     _sp->dictionary()->initializeDictReturnedBytes();
  7684   assert(_limit >= _sp->bottom() && _limit <= _sp->end(),
  7685          "sweep _limit out of bounds");
  7686   if (CMSTraceSweeper) {
  7687     gclog_or_tty->print("\n====================\nStarting new sweep\n");
  7691 // We need this destructor to reclaim any space at the end
  7692 // of the space, which do_blk below may not have added back to
  7693 // the free lists. [basically dealing with the "fringe effect"]
  7694 SweepClosure::~SweepClosure() {
  7695   assert_lock_strong(_freelistLock);
  7696   // this should be treated as the end of a free run if any
  7697   // The current free range should be returned to the free lists
  7698   // as one coalesced chunk.
  7699   if (inFreeRange()) {
  7700     flushCurFreeChunk(freeFinger(),
  7701       pointer_delta(_limit, freeFinger()));
  7702     assert(freeFinger() < _limit, "the finger pointeth off base");
  7703     if (CMSTraceSweeper) {
  7704       gclog_or_tty->print("destructor:");
  7705       gclog_or_tty->print("Sweep:put_free_blk 0x%x ("SIZE_FORMAT") "
  7706                  "[coalesced:"SIZE_FORMAT"]\n",
  7707                  freeFinger(), pointer_delta(_limit, freeFinger()),
  7708                  lastFreeRangeCoalesced());
  7711   NOT_PRODUCT(
  7712     if (Verbose && PrintGC) {
  7713       gclog_or_tty->print("Collected "SIZE_FORMAT" objects, "
  7714                           SIZE_FORMAT " bytes",
  7715                  _numObjectsFreed, _numWordsFreed*sizeof(HeapWord));
  7716       gclog_or_tty->print_cr("\nLive "SIZE_FORMAT" objects,  "
  7717                              SIZE_FORMAT" bytes  "
  7718         "Already free "SIZE_FORMAT" objects, "SIZE_FORMAT" bytes",
  7719         _numObjectsLive, _numWordsLive*sizeof(HeapWord),
  7720         _numObjectsAlreadyFree, _numWordsAlreadyFree*sizeof(HeapWord));
  7721       size_t totalBytes = (_numWordsFreed + _numWordsLive + _numWordsAlreadyFree) *
  7722         sizeof(HeapWord);
  7723       gclog_or_tty->print_cr("Total sweep: "SIZE_FORMAT" bytes", totalBytes);
  7725       if (PrintCMSStatistics && CMSVerifyReturnedBytes) {
  7726         size_t indexListReturnedBytes = _sp->sumIndexedFreeListArrayReturnedBytes();
  7727         size_t dictReturnedBytes = _sp->dictionary()->sumDictReturnedBytes();
  7728         size_t returnedBytes = indexListReturnedBytes + dictReturnedBytes;
  7729         gclog_or_tty->print("Returned "SIZE_FORMAT" bytes", returnedBytes);
  7730         gclog_or_tty->print("   Indexed List Returned "SIZE_FORMAT" bytes",
  7731           indexListReturnedBytes);
  7732         gclog_or_tty->print_cr("        Dictionary Returned "SIZE_FORMAT" bytes",
  7733           dictReturnedBytes);
  7737   // Now, in debug mode, just null out the sweep_limit
  7738   NOT_PRODUCT(_sp->clear_sweep_limit();)
  7739   if (CMSTraceSweeper) {
  7740     gclog_or_tty->print("end of sweep\n================\n");
  7744 void SweepClosure::initialize_free_range(HeapWord* freeFinger,
  7745     bool freeRangeInFreeLists) {
  7746   if (CMSTraceSweeper) {
  7747     gclog_or_tty->print("---- Start free range 0x%x with free block [%d] (%d)\n",
  7748                freeFinger, _sp->block_size(freeFinger),
  7749                freeRangeInFreeLists);
  7751   assert(!inFreeRange(), "Trampling existing free range");
  7752   set_inFreeRange(true);
  7753   set_lastFreeRangeCoalesced(false);
  7755   set_freeFinger(freeFinger);
  7756   set_freeRangeInFreeLists(freeRangeInFreeLists);
  7757   if (CMSTestInFreeList) {
  7758     if (freeRangeInFreeLists) {
  7759       FreeChunk* fc = (FreeChunk*) freeFinger;
  7760       assert(fc->isFree(), "A chunk on the free list should be free.");
  7761       assert(fc->size() > 0, "Free range should have a size");
  7762       assert(_sp->verifyChunkInFreeLists(fc), "Chunk is not in free lists");
  7767 // Note that the sweeper runs concurrently with mutators. Thus,
  7768 // it is possible for direct allocation in this generation to happen
  7769 // in the middle of the sweep. Note that the sweeper also coalesces
  7770 // contiguous free blocks. Thus, unless the sweeper and the allocator
  7771 // synchronize appropriately freshly allocated blocks may get swept up.
  7772 // This is accomplished by the sweeper locking the free lists while
  7773 // it is sweeping. Thus blocks that are determined to be free are
  7774 // indeed free. There is however one additional complication:
  7775 // blocks that have been allocated since the final checkpoint and
  7776 // mark, will not have been marked and so would be treated as
  7777 // unreachable and swept up. To prevent this, the allocator marks
  7778 // the bit map when allocating during the sweep phase. This leads,
  7779 // however, to a further complication -- objects may have been allocated
  7780 // but not yet initialized -- in the sense that the header isn't yet
  7781 // installed. The sweeper can not then determine the size of the block
  7782 // in order to skip over it. To deal with this case, we use a technique
  7783 // (due to Printezis) to encode such uninitialized block sizes in the
  7784 // bit map. Since the bit map uses a bit per every HeapWord, but the
  7785 // CMS generation has a minimum object size of 3 HeapWords, it follows
  7786 // that "normal marks" won't be adjacent in the bit map (there will
  7787 // always be at least two 0 bits between successive 1 bits). We make use
  7788 // of these "unused" bits to represent uninitialized blocks -- the bit
  7789 // corresponding to the start of the uninitialized object and the next
  7790 // bit are both set. Finally, a 1 bit marks the end of the object that
  7791 // started with the two consecutive 1 bits to indicate its potentially
  7792 // uninitialized state.
  7794 size_t SweepClosure::do_blk_careful(HeapWord* addr) {
  7795   FreeChunk* fc = (FreeChunk*)addr;
  7796   size_t res;
  7798   // check if we are done sweepinrg
  7799   if (addr == _limit) { // we have swept up to the limit, do nothing more
  7800     assert(_limit >= _sp->bottom() && _limit <= _sp->end(),
  7801            "sweep _limit out of bounds");
  7802     // help the closure application finish
  7803     return pointer_delta(_sp->end(), _limit);
  7805   assert(addr <= _limit, "sweep invariant");
  7807   // check if we should yield
  7808   do_yield_check(addr);
  7809   if (fc->isFree()) {
  7810     // Chunk that is already free
  7811     res = fc->size();
  7812     doAlreadyFreeChunk(fc);
  7813     debug_only(_sp->verifyFreeLists());
  7814     assert(res == fc->size(), "Don't expect the size to change");
  7815     NOT_PRODUCT(
  7816       _numObjectsAlreadyFree++;
  7817       _numWordsAlreadyFree += res;
  7819     NOT_PRODUCT(_last_fc = fc;)
  7820   } else if (!_bitMap->isMarked(addr)) {
  7821     // Chunk is fresh garbage
  7822     res = doGarbageChunk(fc);
  7823     debug_only(_sp->verifyFreeLists());
  7824     NOT_PRODUCT(
  7825       _numObjectsFreed++;
  7826       _numWordsFreed += res;
  7828   } else {
  7829     // Chunk that is alive.
  7830     res = doLiveChunk(fc);
  7831     debug_only(_sp->verifyFreeLists());
  7832     NOT_PRODUCT(
  7833         _numObjectsLive++;
  7834         _numWordsLive += res;
  7837   return res;
  7840 // For the smart allocation, record following
  7841 //  split deaths - a free chunk is removed from its free list because
  7842 //      it is being split into two or more chunks.
  7843 //  split birth - a free chunk is being added to its free list because
  7844 //      a larger free chunk has been split and resulted in this free chunk.
  7845 //  coal death - a free chunk is being removed from its free list because
  7846 //      it is being coalesced into a large free chunk.
  7847 //  coal birth - a free chunk is being added to its free list because
  7848 //      it was created when two or more free chunks where coalesced into
  7849 //      this free chunk.
  7850 //
  7851 // These statistics are used to determine the desired number of free
  7852 // chunks of a given size.  The desired number is chosen to be relative
  7853 // to the end of a CMS sweep.  The desired number at the end of a sweep
  7854 // is the
  7855 //      count-at-end-of-previous-sweep (an amount that was enough)
  7856 //              - count-at-beginning-of-current-sweep  (the excess)
  7857 //              + split-births  (gains in this size during interval)
  7858 //              - split-deaths  (demands on this size during interval)
  7859 // where the interval is from the end of one sweep to the end of the
  7860 // next.
  7861 //
  7862 // When sweeping the sweeper maintains an accumulated chunk which is
  7863 // the chunk that is made up of chunks that have been coalesced.  That
  7864 // will be termed the left-hand chunk.  A new chunk of garbage that
  7865 // is being considered for coalescing will be referred to as the
  7866 // right-hand chunk.
  7867 //
  7868 // When making a decision on whether to coalesce a right-hand chunk with
  7869 // the current left-hand chunk, the current count vs. the desired count
  7870 // of the left-hand chunk is considered.  Also if the right-hand chunk
  7871 // is near the large chunk at the end of the heap (see
  7872 // ConcurrentMarkSweepGeneration::isNearLargestChunk()), then the
  7873 // left-hand chunk is coalesced.
  7874 //
  7875 // When making a decision about whether to split a chunk, the desired count
  7876 // vs. the current count of the candidate to be split is also considered.
  7877 // If the candidate is underpopulated (currently fewer chunks than desired)
  7878 // a chunk of an overpopulated (currently more chunks than desired) size may
  7879 // be chosen.  The "hint" associated with a free list, if non-null, points
  7880 // to a free list which may be overpopulated.
  7881 //
  7883 void SweepClosure::doAlreadyFreeChunk(FreeChunk* fc) {
  7884   size_t size = fc->size();
  7885   // Chunks that cannot be coalesced are not in the
  7886   // free lists.
  7887   if (CMSTestInFreeList && !fc->cantCoalesce()) {
  7888     assert(_sp->verifyChunkInFreeLists(fc),
  7889       "free chunk should be in free lists");
  7891   // a chunk that is already free, should not have been
  7892   // marked in the bit map
  7893   HeapWord* addr = (HeapWord*) fc;
  7894   assert(!_bitMap->isMarked(addr), "free chunk should be unmarked");
  7895   // Verify that the bit map has no bits marked between
  7896   // addr and purported end of this block.
  7897   _bitMap->verifyNoOneBitsInRange(addr + 1, addr + size);
  7899   // Some chunks cannot be coalesced in under any circumstances.
  7900   // See the definition of cantCoalesce().
  7901   if (!fc->cantCoalesce()) {
  7902     // This chunk can potentially be coalesced.
  7903     if (_sp->adaptive_freelists()) {
  7904       // All the work is done in
  7905       doPostIsFreeOrGarbageChunk(fc, size);
  7906     } else {  // Not adaptive free lists
  7907       // this is a free chunk that can potentially be coalesced by the sweeper;
  7908       if (!inFreeRange()) {
  7909         // if the next chunk is a free block that can't be coalesced
  7910         // it doesn't make sense to remove this chunk from the free lists
  7911         FreeChunk* nextChunk = (FreeChunk*)(addr + size);
  7912         assert((HeapWord*)nextChunk <= _limit, "sweep invariant");
  7913         if ((HeapWord*)nextChunk < _limit  &&    // there's a next chunk...
  7914             nextChunk->isFree()    &&            // which is free...
  7915             nextChunk->cantCoalesce()) {         // ... but cant be coalesced
  7916           // nothing to do
  7917         } else {
  7918           // Potentially the start of a new free range:
  7919           // Don't eagerly remove it from the free lists.
  7920           // No need to remove it if it will just be put
  7921           // back again.  (Also from a pragmatic point of view
  7922           // if it is a free block in a region that is beyond
  7923           // any allocated blocks, an assertion will fail)
  7924           // Remember the start of a free run.
  7925           initialize_free_range(addr, true);
  7926           // end - can coalesce with next chunk
  7928       } else {
  7929         // the midst of a free range, we are coalescing
  7930         debug_only(record_free_block_coalesced(fc);)
  7931         if (CMSTraceSweeper) {
  7932           gclog_or_tty->print("  -- pick up free block 0x%x (%d)\n", fc, size);
  7934         // remove it from the free lists
  7935         _sp->removeFreeChunkFromFreeLists(fc);
  7936         set_lastFreeRangeCoalesced(true);
  7937         // If the chunk is being coalesced and the current free range is
  7938         // in the free lists, remove the current free range so that it
  7939         // will be returned to the free lists in its entirety - all
  7940         // the coalesced pieces included.
  7941         if (freeRangeInFreeLists()) {
  7942           FreeChunk* ffc = (FreeChunk*) freeFinger();
  7943           assert(ffc->size() == pointer_delta(addr, freeFinger()),
  7944             "Size of free range is inconsistent with chunk size.");
  7945           if (CMSTestInFreeList) {
  7946             assert(_sp->verifyChunkInFreeLists(ffc),
  7947               "free range is not in free lists");
  7949           _sp->removeFreeChunkFromFreeLists(ffc);
  7950           set_freeRangeInFreeLists(false);
  7954   } else {
  7955     // Code path common to both original and adaptive free lists.
  7957     // cant coalesce with previous block; this should be treated
  7958     // as the end of a free run if any
  7959     if (inFreeRange()) {
  7960       // we kicked some butt; time to pick up the garbage
  7961       assert(freeFinger() < addr, "the finger pointeth off base");
  7962       flushCurFreeChunk(freeFinger(), pointer_delta(addr, freeFinger()));
  7964     // else, nothing to do, just continue
  7968 size_t SweepClosure::doGarbageChunk(FreeChunk* fc) {
  7969   // This is a chunk of garbage.  It is not in any free list.
  7970   // Add it to a free list or let it possibly be coalesced into
  7971   // a larger chunk.
  7972   HeapWord* addr = (HeapWord*) fc;
  7973   size_t size = CompactibleFreeListSpace::adjustObjectSize(oop(addr)->size());
  7975   if (_sp->adaptive_freelists()) {
  7976     // Verify that the bit map has no bits marked between
  7977     // addr and purported end of just dead object.
  7978     _bitMap->verifyNoOneBitsInRange(addr + 1, addr + size);
  7980     doPostIsFreeOrGarbageChunk(fc, size);
  7981   } else {
  7982     if (!inFreeRange()) {
  7983       // start of a new free range
  7984       assert(size > 0, "A free range should have a size");
  7985       initialize_free_range(addr, false);
  7987     } else {
  7988       // this will be swept up when we hit the end of the
  7989       // free range
  7990       if (CMSTraceSweeper) {
  7991         gclog_or_tty->print("  -- pick up garbage 0x%x (%d) \n", fc, size);
  7993       // If the chunk is being coalesced and the current free range is
  7994       // in the free lists, remove the current free range so that it
  7995       // will be returned to the free lists in its entirety - all
  7996       // the coalesced pieces included.
  7997       if (freeRangeInFreeLists()) {
  7998         FreeChunk* ffc = (FreeChunk*)freeFinger();
  7999         assert(ffc->size() == pointer_delta(addr, freeFinger()),
  8000           "Size of free range is inconsistent with chunk size.");
  8001         if (CMSTestInFreeList) {
  8002           assert(_sp->verifyChunkInFreeLists(ffc),
  8003             "free range is not in free lists");
  8005         _sp->removeFreeChunkFromFreeLists(ffc);
  8006         set_freeRangeInFreeLists(false);
  8008       set_lastFreeRangeCoalesced(true);
  8010     // this will be swept up when we hit the end of the free range
  8012     // Verify that the bit map has no bits marked between
  8013     // addr and purported end of just dead object.
  8014     _bitMap->verifyNoOneBitsInRange(addr + 1, addr + size);
  8016   return size;
  8019 size_t SweepClosure::doLiveChunk(FreeChunk* fc) {
  8020   HeapWord* addr = (HeapWord*) fc;
  8021   // The sweeper has just found a live object. Return any accumulated
  8022   // left hand chunk to the free lists.
  8023   if (inFreeRange()) {
  8024     if (_sp->adaptive_freelists()) {
  8025       flushCurFreeChunk(freeFinger(),
  8026                         pointer_delta(addr, freeFinger()));
  8027     } else { // not adaptive freelists
  8028       set_inFreeRange(false);
  8029       // Add the free range back to the free list if it is not already
  8030       // there.
  8031       if (!freeRangeInFreeLists()) {
  8032         assert(freeFinger() < addr, "the finger pointeth off base");
  8033         if (CMSTraceSweeper) {
  8034           gclog_or_tty->print("Sweep:put_free_blk 0x%x (%d) "
  8035             "[coalesced:%d]\n",
  8036             freeFinger(), pointer_delta(addr, freeFinger()),
  8037             lastFreeRangeCoalesced());
  8039         _sp->addChunkAndRepairOffsetTable(freeFinger(),
  8040           pointer_delta(addr, freeFinger()), lastFreeRangeCoalesced());
  8045   // Common code path for original and adaptive free lists.
  8047   // this object is live: we'd normally expect this to be
  8048   // an oop, and like to assert the following:
  8049   // assert(oop(addr)->is_oop(), "live block should be an oop");
  8050   // However, as we commented above, this may be an object whose
  8051   // header hasn't yet been initialized.
  8052   size_t size;
  8053   assert(_bitMap->isMarked(addr), "Tautology for this control point");
  8054   if (_bitMap->isMarked(addr + 1)) {
  8055     // Determine the size from the bit map, rather than trying to
  8056     // compute it from the object header.
  8057     HeapWord* nextOneAddr = _bitMap->getNextMarkedWordAddress(addr + 2);
  8058     size = pointer_delta(nextOneAddr + 1, addr);
  8059     assert(size == CompactibleFreeListSpace::adjustObjectSize(size),
  8060            "alignment problem");
  8062     #ifdef DEBUG
  8063       if (oop(addr)->klass_or_null() != NULL &&
  8064           (   !_collector->should_unload_classes()
  8065            || oop(addr)->is_parsable())) {
  8066         // Ignore mark word because we are running concurrent with mutators
  8067         assert(oop(addr)->is_oop(true), "live block should be an oop");
  8068         assert(size ==
  8069                CompactibleFreeListSpace::adjustObjectSize(oop(addr)->size()),
  8070                "P-mark and computed size do not agree");
  8072     #endif
  8074   } else {
  8075     // This should be an initialized object that's alive.
  8076     assert(oop(addr)->klass_or_null() != NULL &&
  8077            (!_collector->should_unload_classes()
  8078             || oop(addr)->is_parsable()),
  8079            "Should be an initialized object");
  8080     // Ignore mark word because we are running concurrent with mutators
  8081     assert(oop(addr)->is_oop(true), "live block should be an oop");
  8082     // Verify that the bit map has no bits marked between
  8083     // addr and purported end of this block.
  8084     size = CompactibleFreeListSpace::adjustObjectSize(oop(addr)->size());
  8085     assert(size >= 3, "Necessary for Printezis marks to work");
  8086     assert(!_bitMap->isMarked(addr+1), "Tautology for this control point");
  8087     DEBUG_ONLY(_bitMap->verifyNoOneBitsInRange(addr+2, addr+size);)
  8089   return size;
  8092 void SweepClosure::doPostIsFreeOrGarbageChunk(FreeChunk* fc,
  8093                                             size_t chunkSize) {
  8094   // doPostIsFreeOrGarbageChunk() should only be called in the smart allocation
  8095   // scheme.
  8096   bool fcInFreeLists = fc->isFree();
  8097   assert(_sp->adaptive_freelists(), "Should only be used in this case.");
  8098   assert((HeapWord*)fc <= _limit, "sweep invariant");
  8099   if (CMSTestInFreeList && fcInFreeLists) {
  8100     assert(_sp->verifyChunkInFreeLists(fc),
  8101       "free chunk is not in free lists");
  8105   if (CMSTraceSweeper) {
  8106     gclog_or_tty->print_cr("  -- pick up another chunk at 0x%x (%d)", fc, chunkSize);
  8109   HeapWord* addr = (HeapWord*) fc;
  8111   bool coalesce;
  8112   size_t left  = pointer_delta(addr, freeFinger());
  8113   size_t right = chunkSize;
  8114   switch (FLSCoalescePolicy) {
  8115     // numeric value forms a coalition aggressiveness metric
  8116     case 0:  { // never coalesce
  8117       coalesce = false;
  8118       break;
  8120     case 1: { // coalesce if left & right chunks on overpopulated lists
  8121       coalesce = _sp->coalOverPopulated(left) &&
  8122                  _sp->coalOverPopulated(right);
  8123       break;
  8125     case 2: { // coalesce if left chunk on overpopulated list (default)
  8126       coalesce = _sp->coalOverPopulated(left);
  8127       break;
  8129     case 3: { // coalesce if left OR right chunk on overpopulated list
  8130       coalesce = _sp->coalOverPopulated(left) ||
  8131                  _sp->coalOverPopulated(right);
  8132       break;
  8134     case 4: { // always coalesce
  8135       coalesce = true;
  8136       break;
  8138     default:
  8139      ShouldNotReachHere();
  8142   // Should the current free range be coalesced?
  8143   // If the chunk is in a free range and either we decided to coalesce above
  8144   // or the chunk is near the large block at the end of the heap
  8145   // (isNearLargestChunk() returns true), then coalesce this chunk.
  8146   bool doCoalesce = inFreeRange() &&
  8147     (coalesce || _g->isNearLargestChunk((HeapWord*)fc));
  8148   if (doCoalesce) {
  8149     // Coalesce the current free range on the left with the new
  8150     // chunk on the right.  If either is on a free list,
  8151     // it must be removed from the list and stashed in the closure.
  8152     if (freeRangeInFreeLists()) {
  8153       FreeChunk* ffc = (FreeChunk*)freeFinger();
  8154       assert(ffc->size() == pointer_delta(addr, freeFinger()),
  8155         "Size of free range is inconsistent with chunk size.");
  8156       if (CMSTestInFreeList) {
  8157         assert(_sp->verifyChunkInFreeLists(ffc),
  8158           "Chunk is not in free lists");
  8160       _sp->coalDeath(ffc->size());
  8161       _sp->removeFreeChunkFromFreeLists(ffc);
  8162       set_freeRangeInFreeLists(false);
  8164     if (fcInFreeLists) {
  8165       _sp->coalDeath(chunkSize);
  8166       assert(fc->size() == chunkSize,
  8167         "The chunk has the wrong size or is not in the free lists");
  8168       _sp->removeFreeChunkFromFreeLists(fc);
  8170     set_lastFreeRangeCoalesced(true);
  8171   } else {  // not in a free range and/or should not coalesce
  8172     // Return the current free range and start a new one.
  8173     if (inFreeRange()) {
  8174       // In a free range but cannot coalesce with the right hand chunk.
  8175       // Put the current free range into the free lists.
  8176       flushCurFreeChunk(freeFinger(),
  8177         pointer_delta(addr, freeFinger()));
  8179     // Set up for new free range.  Pass along whether the right hand
  8180     // chunk is in the free lists.
  8181     initialize_free_range((HeapWord*)fc, fcInFreeLists);
  8184 void SweepClosure::flushCurFreeChunk(HeapWord* chunk, size_t size) {
  8185   assert(inFreeRange(), "Should only be called if currently in a free range.");
  8186   assert(size > 0,
  8187     "A zero sized chunk cannot be added to the free lists.");
  8188   if (!freeRangeInFreeLists()) {
  8189     if(CMSTestInFreeList) {
  8190       FreeChunk* fc = (FreeChunk*) chunk;
  8191       fc->setSize(size);
  8192       assert(!_sp->verifyChunkInFreeLists(fc),
  8193         "chunk should not be in free lists yet");
  8195     if (CMSTraceSweeper) {
  8196       gclog_or_tty->print_cr(" -- add free block 0x%x (%d) to free lists",
  8197                     chunk, size);
  8199     // A new free range is going to be starting.  The current
  8200     // free range has not been added to the free lists yet or
  8201     // was removed so add it back.
  8202     // If the current free range was coalesced, then the death
  8203     // of the free range was recorded.  Record a birth now.
  8204     if (lastFreeRangeCoalesced()) {
  8205       _sp->coalBirth(size);
  8207     _sp->addChunkAndRepairOffsetTable(chunk, size,
  8208             lastFreeRangeCoalesced());
  8210   set_inFreeRange(false);
  8211   set_freeRangeInFreeLists(false);
  8214 // We take a break if we've been at this for a while,
  8215 // so as to avoid monopolizing the locks involved.
  8216 void SweepClosure::do_yield_work(HeapWord* addr) {
  8217   // Return current free chunk being used for coalescing (if any)
  8218   // to the appropriate freelist.  After yielding, the next
  8219   // free block encountered will start a coalescing range of
  8220   // free blocks.  If the next free block is adjacent to the
  8221   // chunk just flushed, they will need to wait for the next
  8222   // sweep to be coalesced.
  8223   if (inFreeRange()) {
  8224     flushCurFreeChunk(freeFinger(), pointer_delta(addr, freeFinger()));
  8227   // First give up the locks, then yield, then re-lock.
  8228   // We should probably use a constructor/destructor idiom to
  8229   // do this unlock/lock or modify the MutexUnlocker class to
  8230   // serve our purpose. XXX
  8231   assert_lock_strong(_bitMap->lock());
  8232   assert_lock_strong(_freelistLock);
  8233   assert(ConcurrentMarkSweepThread::cms_thread_has_cms_token(),
  8234          "CMS thread should hold CMS token");
  8235   _bitMap->lock()->unlock();
  8236   _freelistLock->unlock();
  8237   ConcurrentMarkSweepThread::desynchronize(true);
  8238   ConcurrentMarkSweepThread::acknowledge_yield_request();
  8239   _collector->stopTimer();
  8240   GCPauseTimer p(_collector->size_policy()->concurrent_timer_ptr());
  8241   if (PrintCMSStatistics != 0) {
  8242     _collector->incrementYields();
  8244   _collector->icms_wait();
  8246   // See the comment in coordinator_yield()
  8247   for (unsigned i = 0; i < CMSYieldSleepCount &&
  8248                        ConcurrentMarkSweepThread::should_yield() &&
  8249                        !CMSCollector::foregroundGCIsActive(); ++i) {
  8250     os::sleep(Thread::current(), 1, false);
  8251     ConcurrentMarkSweepThread::acknowledge_yield_request();
  8254   ConcurrentMarkSweepThread::synchronize(true);
  8255   _freelistLock->lock();
  8256   _bitMap->lock()->lock_without_safepoint_check();
  8257   _collector->startTimer();
  8260 #ifndef PRODUCT
  8261 // This is actually very useful in a product build if it can
  8262 // be called from the debugger.  Compile it into the product
  8263 // as needed.
  8264 bool debug_verifyChunkInFreeLists(FreeChunk* fc) {
  8265   return debug_cms_space->verifyChunkInFreeLists(fc);
  8268 void SweepClosure::record_free_block_coalesced(FreeChunk* fc) const {
  8269   if (CMSTraceSweeper) {
  8270     gclog_or_tty->print("Sweep:coal_free_blk 0x%x (%d)\n", fc, fc->size());
  8273 #endif
  8275 // CMSIsAliveClosure
  8276 bool CMSIsAliveClosure::do_object_b(oop obj) {
  8277   HeapWord* addr = (HeapWord*)obj;
  8278   return addr != NULL &&
  8279          (!_span.contains(addr) || _bit_map->isMarked(addr));
  8282 // CMSKeepAliveClosure: the serial version
  8283 void CMSKeepAliveClosure::do_oop(oop obj) {
  8284   HeapWord* addr = (HeapWord*)obj;
  8285   if (_span.contains(addr) &&
  8286       !_bit_map->isMarked(addr)) {
  8287     _bit_map->mark(addr);
  8288     bool simulate_overflow = false;
  8289     NOT_PRODUCT(
  8290       if (CMSMarkStackOverflowALot &&
  8291           _collector->simulate_overflow()) {
  8292         // simulate a stack overflow
  8293         simulate_overflow = true;
  8296     if (simulate_overflow || !_mark_stack->push(obj)) {
  8297       if (_concurrent_precleaning) {
  8298         // We dirty the overflown object and let the remark
  8299         // phase deal with it.
  8300         assert(_collector->overflow_list_is_empty(), "Error");
  8301         // In the case of object arrays, we need to dirty all of
  8302         // the cards that the object spans. No locking or atomics
  8303         // are needed since no one else can be mutating the mod union
  8304         // table.
  8305         if (obj->is_objArray()) {
  8306           size_t sz = obj->size();
  8307           HeapWord* end_card_addr =
  8308             (HeapWord*)round_to((intptr_t)(addr+sz), CardTableModRefBS::card_size);
  8309           MemRegion redirty_range = MemRegion(addr, end_card_addr);
  8310           assert(!redirty_range.is_empty(), "Arithmetical tautology");
  8311           _collector->_modUnionTable.mark_range(redirty_range);
  8312         } else {
  8313           _collector->_modUnionTable.mark(addr);
  8315         _collector->_ser_kac_preclean_ovflw++;
  8316       } else {
  8317         _collector->push_on_overflow_list(obj);
  8318         _collector->_ser_kac_ovflw++;
  8324 void CMSKeepAliveClosure::do_oop(oop* p)       { CMSKeepAliveClosure::do_oop_work(p); }
  8325 void CMSKeepAliveClosure::do_oop(narrowOop* p) { CMSKeepAliveClosure::do_oop_work(p); }
  8327 // CMSParKeepAliveClosure: a parallel version of the above.
  8328 // The work queues are private to each closure (thread),
  8329 // but (may be) available for stealing by other threads.
  8330 void CMSParKeepAliveClosure::do_oop(oop obj) {
  8331   HeapWord* addr = (HeapWord*)obj;
  8332   if (_span.contains(addr) &&
  8333       !_bit_map->isMarked(addr)) {
  8334     // In general, during recursive tracing, several threads
  8335     // may be concurrently getting here; the first one to
  8336     // "tag" it, claims it.
  8337     if (_bit_map->par_mark(addr)) {
  8338       bool res = _work_queue->push(obj);
  8339       assert(res, "Low water mark should be much less than capacity");
  8340       // Do a recursive trim in the hope that this will keep
  8341       // stack usage lower, but leave some oops for potential stealers
  8342       trim_queue(_low_water_mark);
  8343     } // Else, another thread got there first
  8347 void CMSParKeepAliveClosure::do_oop(oop* p)       { CMSParKeepAliveClosure::do_oop_work(p); }
  8348 void CMSParKeepAliveClosure::do_oop(narrowOop* p) { CMSParKeepAliveClosure::do_oop_work(p); }
  8350 void CMSParKeepAliveClosure::trim_queue(uint max) {
  8351   while (_work_queue->size() > max) {
  8352     oop new_oop;
  8353     if (_work_queue->pop_local(new_oop)) {
  8354       assert(new_oop != NULL && new_oop->is_oop(), "Expected an oop");
  8355       assert(_bit_map->isMarked((HeapWord*)new_oop),
  8356              "no white objects on this stack!");
  8357       assert(_span.contains((HeapWord*)new_oop), "Out of bounds oop");
  8358       // iterate over the oops in this oop, marking and pushing
  8359       // the ones in CMS heap (i.e. in _span).
  8360       new_oop->oop_iterate(&_mark_and_push);
  8365 void CMSInnerParMarkAndPushClosure::do_oop(oop obj) {
  8366   HeapWord* addr = (HeapWord*)obj;
  8367   if (_span.contains(addr) &&
  8368       !_bit_map->isMarked(addr)) {
  8369     if (_bit_map->par_mark(addr)) {
  8370       bool simulate_overflow = false;
  8371       NOT_PRODUCT(
  8372         if (CMSMarkStackOverflowALot &&
  8373             _collector->par_simulate_overflow()) {
  8374           // simulate a stack overflow
  8375           simulate_overflow = true;
  8378       if (simulate_overflow || !_work_queue->push(obj)) {
  8379         _collector->par_push_on_overflow_list(obj);
  8380         _collector->_par_kac_ovflw++;
  8382     } // Else another thread got there already
  8386 void CMSInnerParMarkAndPushClosure::do_oop(oop* p)       { CMSInnerParMarkAndPushClosure::do_oop_work(p); }
  8387 void CMSInnerParMarkAndPushClosure::do_oop(narrowOop* p) { CMSInnerParMarkAndPushClosure::do_oop_work(p); }
  8389 //////////////////////////////////////////////////////////////////
  8390 //  CMSExpansionCause                /////////////////////////////
  8391 //////////////////////////////////////////////////////////////////
  8392 const char* CMSExpansionCause::to_string(CMSExpansionCause::Cause cause) {
  8393   switch (cause) {
  8394     case _no_expansion:
  8395       return "No expansion";
  8396     case _satisfy_free_ratio:
  8397       return "Free ratio";
  8398     case _satisfy_promotion:
  8399       return "Satisfy promotion";
  8400     case _satisfy_allocation:
  8401       return "allocation";
  8402     case _allocate_par_lab:
  8403       return "Par LAB";
  8404     case _allocate_par_spooling_space:
  8405       return "Par Spooling Space";
  8406     case _adaptive_size_policy:
  8407       return "Ergonomics";
  8408     default:
  8409       return "unknown";
  8413 void CMSDrainMarkingStackClosure::do_void() {
  8414   // the max number to take from overflow list at a time
  8415   const size_t num = _mark_stack->capacity()/4;
  8416   assert(!_concurrent_precleaning || _collector->overflow_list_is_empty(),
  8417          "Overflow list should be NULL during concurrent phases");
  8418   while (!_mark_stack->isEmpty() ||
  8419          // if stack is empty, check the overflow list
  8420          _collector->take_from_overflow_list(num, _mark_stack)) {
  8421     oop obj = _mark_stack->pop();
  8422     HeapWord* addr = (HeapWord*)obj;
  8423     assert(_span.contains(addr), "Should be within span");
  8424     assert(_bit_map->isMarked(addr), "Should be marked");
  8425     assert(obj->is_oop(), "Should be an oop");
  8426     obj->oop_iterate(_keep_alive);
  8430 void CMSParDrainMarkingStackClosure::do_void() {
  8431   // drain queue
  8432   trim_queue(0);
  8435 // Trim our work_queue so its length is below max at return
  8436 void CMSParDrainMarkingStackClosure::trim_queue(uint max) {
  8437   while (_work_queue->size() > max) {
  8438     oop new_oop;
  8439     if (_work_queue->pop_local(new_oop)) {
  8440       assert(new_oop->is_oop(), "Expected an oop");
  8441       assert(_bit_map->isMarked((HeapWord*)new_oop),
  8442              "no white objects on this stack!");
  8443       assert(_span.contains((HeapWord*)new_oop), "Out of bounds oop");
  8444       // iterate over the oops in this oop, marking and pushing
  8445       // the ones in CMS heap (i.e. in _span).
  8446       new_oop->oop_iterate(&_mark_and_push);
  8451 ////////////////////////////////////////////////////////////////////
  8452 // Support for Marking Stack Overflow list handling and related code
  8453 ////////////////////////////////////////////////////////////////////
  8454 // Much of the following code is similar in shape and spirit to the
  8455 // code used in ParNewGC. We should try and share that code
  8456 // as much as possible in the future.
  8458 #ifndef PRODUCT
  8459 // Debugging support for CMSStackOverflowALot
  8461 // It's OK to call this multi-threaded;  the worst thing
  8462 // that can happen is that we'll get a bunch of closely
  8463 // spaced simulated oveflows, but that's OK, in fact
  8464 // probably good as it would exercise the overflow code
  8465 // under contention.
  8466 bool CMSCollector::simulate_overflow() {
  8467   if (_overflow_counter-- <= 0) { // just being defensive
  8468     _overflow_counter = CMSMarkStackOverflowInterval;
  8469     return true;
  8470   } else {
  8471     return false;
  8475 bool CMSCollector::par_simulate_overflow() {
  8476   return simulate_overflow();
  8478 #endif
  8480 // Single-threaded
  8481 bool CMSCollector::take_from_overflow_list(size_t num, CMSMarkStack* stack) {
  8482   assert(stack->isEmpty(), "Expected precondition");
  8483   assert(stack->capacity() > num, "Shouldn't bite more than can chew");
  8484   size_t i = num;
  8485   oop  cur = _overflow_list;
  8486   const markOop proto = markOopDesc::prototype();
  8487   NOT_PRODUCT(size_t n = 0;)
  8488   for (oop next; i > 0 && cur != NULL; cur = next, i--) {
  8489     next = oop(cur->mark());
  8490     cur->set_mark(proto);   // until proven otherwise
  8491     assert(cur->is_oop(), "Should be an oop");
  8492     bool res = stack->push(cur);
  8493     assert(res, "Bit off more than can chew?");
  8494     NOT_PRODUCT(n++;)
  8496   _overflow_list = cur;
  8497 #ifndef PRODUCT
  8498   assert(_num_par_pushes >= n, "Too many pops?");
  8499   _num_par_pushes -=n;
  8500 #endif
  8501   return !stack->isEmpty();
  8504 // Multi-threaded; use CAS to break off a prefix
  8505 bool CMSCollector::par_take_from_overflow_list(size_t num,
  8506                                                OopTaskQueue* work_q) {
  8507   assert(work_q->size() == 0, "That's the current policy");
  8508   assert(num < work_q->max_elems(), "Can't bite more than we can chew");
  8509   if (_overflow_list == NULL) {
  8510     return false;
  8512   // Grab the entire list; we'll put back a suffix
  8513   oop prefix = (oop)Atomic::xchg_ptr(NULL, &_overflow_list);
  8514   if (prefix == NULL) {  // someone grabbed it before we did ...
  8515     // ... we could spin for a short while, but for now we don't
  8516     return false;
  8518   size_t i = num;
  8519   oop cur = prefix;
  8520   for (; i > 1 && cur->mark() != NULL; cur = oop(cur->mark()), i--);
  8521   if (cur->mark() != NULL) {
  8522     oop suffix_head = cur->mark(); // suffix will be put back on global list
  8523     cur->set_mark(NULL);           // break off suffix
  8524     // Find tail of suffix so we can prepend suffix to global list
  8525     for (cur = suffix_head; cur->mark() != NULL; cur = (oop)(cur->mark()));
  8526     oop suffix_tail = cur;
  8527     assert(suffix_tail != NULL && suffix_tail->mark() == NULL,
  8528            "Tautology");
  8529     oop observed_overflow_list = _overflow_list;
  8530     do {
  8531       cur = observed_overflow_list;
  8532       suffix_tail->set_mark(markOop(cur));
  8533       observed_overflow_list =
  8534         (oop) Atomic::cmpxchg_ptr(suffix_head, &_overflow_list, cur);
  8535     } while (cur != observed_overflow_list);
  8538   // Push the prefix elements on work_q
  8539   assert(prefix != NULL, "control point invariant");
  8540   const markOop proto = markOopDesc::prototype();
  8541   oop next;
  8542   NOT_PRODUCT(size_t n = 0;)
  8543   for (cur = prefix; cur != NULL; cur = next) {
  8544     next = oop(cur->mark());
  8545     cur->set_mark(proto);   // until proven otherwise
  8546     assert(cur->is_oop(), "Should be an oop");
  8547     bool res = work_q->push(cur);
  8548     assert(res, "Bit off more than we can chew?");
  8549     NOT_PRODUCT(n++;)
  8551 #ifndef PRODUCT
  8552   assert(_num_par_pushes >= n, "Too many pops?");
  8553   Atomic::add_ptr(-(intptr_t)n, &_num_par_pushes);
  8554 #endif
  8555   return true;
  8558 // Single-threaded
  8559 void CMSCollector::push_on_overflow_list(oop p) {
  8560   NOT_PRODUCT(_num_par_pushes++;)
  8561   assert(p->is_oop(), "Not an oop");
  8562   preserve_mark_if_necessary(p);
  8563   p->set_mark((markOop)_overflow_list);
  8564   _overflow_list = p;
  8567 // Multi-threaded; use CAS to prepend to overflow list
  8568 void CMSCollector::par_push_on_overflow_list(oop p) {
  8569   NOT_PRODUCT(Atomic::inc_ptr(&_num_par_pushes);)
  8570   assert(p->is_oop(), "Not an oop");
  8571   par_preserve_mark_if_necessary(p);
  8572   oop observed_overflow_list = _overflow_list;
  8573   oop cur_overflow_list;
  8574   do {
  8575     cur_overflow_list = observed_overflow_list;
  8576     p->set_mark(markOop(cur_overflow_list));
  8577     observed_overflow_list =
  8578       (oop) Atomic::cmpxchg_ptr(p, &_overflow_list, cur_overflow_list);
  8579   } while (cur_overflow_list != observed_overflow_list);
  8582 // Single threaded
  8583 // General Note on GrowableArray: pushes may silently fail
  8584 // because we are (temporarily) out of C-heap for expanding
  8585 // the stack. The problem is quite ubiquitous and affects
  8586 // a lot of code in the JVM. The prudent thing for GrowableArray
  8587 // to do (for now) is to exit with an error. However, that may
  8588 // be too draconian in some cases because the caller may be
  8589 // able to recover without much harm. For suych cases, we
  8590 // should probably introduce a "soft_push" method which returns
  8591 // an indication of success or failure with the assumption that
  8592 // the caller may be able to recover from a failure; code in
  8593 // the VM can then be changed, incrementally, to deal with such
  8594 // failures where possible, thus, incrementally hardening the VM
  8595 // in such low resource situations.
  8596 void CMSCollector::preserve_mark_work(oop p, markOop m) {
  8597   int PreserveMarkStackSize = 128;
  8599   if (_preserved_oop_stack == NULL) {
  8600     assert(_preserved_mark_stack == NULL,
  8601            "bijection with preserved_oop_stack");
  8602     // Allocate the stacks
  8603     _preserved_oop_stack  = new (ResourceObj::C_HEAP)
  8604       GrowableArray<oop>(PreserveMarkStackSize, true);
  8605     _preserved_mark_stack = new (ResourceObj::C_HEAP)
  8606       GrowableArray<markOop>(PreserveMarkStackSize, true);
  8607     if (_preserved_oop_stack == NULL || _preserved_mark_stack == NULL) {
  8608       vm_exit_out_of_memory(2* PreserveMarkStackSize * sizeof(oop) /* punt */,
  8609                             "Preserved Mark/Oop Stack for CMS (C-heap)");
  8612   _preserved_oop_stack->push(p);
  8613   _preserved_mark_stack->push(m);
  8614   assert(m == p->mark(), "Mark word changed");
  8615   assert(_preserved_oop_stack->length() == _preserved_mark_stack->length(),
  8616          "bijection");
  8619 // Single threaded
  8620 void CMSCollector::preserve_mark_if_necessary(oop p) {
  8621   markOop m = p->mark();
  8622   if (m->must_be_preserved(p)) {
  8623     preserve_mark_work(p, m);
  8627 void CMSCollector::par_preserve_mark_if_necessary(oop p) {
  8628   markOop m = p->mark();
  8629   if (m->must_be_preserved(p)) {
  8630     MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag);
  8631     // Even though we read the mark word without holding
  8632     // the lock, we are assured that it will not change
  8633     // because we "own" this oop, so no other thread can
  8634     // be trying to push it on the overflow list; see
  8635     // the assertion in preserve_mark_work() that checks
  8636     // that m == p->mark().
  8637     preserve_mark_work(p, m);
  8641 // We should be able to do this multi-threaded,
  8642 // a chunk of stack being a task (this is
  8643 // correct because each oop only ever appears
  8644 // once in the overflow list. However, it's
  8645 // not very easy to completely overlap this with
  8646 // other operations, so will generally not be done
  8647 // until all work's been completed. Because we
  8648 // expect the preserved oop stack (set) to be small,
  8649 // it's probably fine to do this single-threaded.
  8650 // We can explore cleverer concurrent/overlapped/parallel
  8651 // processing of preserved marks if we feel the
  8652 // need for this in the future. Stack overflow should
  8653 // be so rare in practice and, when it happens, its
  8654 // effect on performance so great that this will
  8655 // likely just be in the noise anyway.
  8656 void CMSCollector::restore_preserved_marks_if_any() {
  8657   if (_preserved_oop_stack == NULL) {
  8658     assert(_preserved_mark_stack == NULL,
  8659            "bijection with preserved_oop_stack");
  8660     return;
  8663   assert(SafepointSynchronize::is_at_safepoint(),
  8664          "world should be stopped");
  8665   assert(Thread::current()->is_ConcurrentGC_thread() ||
  8666          Thread::current()->is_VM_thread(),
  8667          "should be single-threaded");
  8669   int length = _preserved_oop_stack->length();
  8670   assert(_preserved_mark_stack->length() == length, "bijection");
  8671   for (int i = 0; i < length; i++) {
  8672     oop p = _preserved_oop_stack->at(i);
  8673     assert(p->is_oop(), "Should be an oop");
  8674     assert(_span.contains(p), "oop should be in _span");
  8675     assert(p->mark() == markOopDesc::prototype(),
  8676            "Set when taken from overflow list");
  8677     markOop m = _preserved_mark_stack->at(i);
  8678     p->set_mark(m);
  8680   _preserved_mark_stack->clear();
  8681   _preserved_oop_stack->clear();
  8682   assert(_preserved_mark_stack->is_empty() &&
  8683          _preserved_oop_stack->is_empty(),
  8684          "stacks were cleared above");
  8687 #ifndef PRODUCT
  8688 bool CMSCollector::no_preserved_marks() const {
  8689   return (   (   _preserved_mark_stack == NULL
  8690               && _preserved_oop_stack == NULL)
  8691           || (   _preserved_mark_stack->is_empty()
  8692               && _preserved_oop_stack->is_empty()));
  8694 #endif
  8696 CMSAdaptiveSizePolicy* ASConcurrentMarkSweepGeneration::cms_size_policy() const
  8698   GenCollectedHeap* gch = (GenCollectedHeap*) GenCollectedHeap::heap();
  8699   CMSAdaptiveSizePolicy* size_policy =
  8700     (CMSAdaptiveSizePolicy*) gch->gen_policy()->size_policy();
  8701   assert(size_policy->is_gc_cms_adaptive_size_policy(),
  8702     "Wrong type for size policy");
  8703   return size_policy;
  8706 void ASConcurrentMarkSweepGeneration::resize(size_t cur_promo_size,
  8707                                            size_t desired_promo_size) {
  8708   if (cur_promo_size < desired_promo_size) {
  8709     size_t expand_bytes = desired_promo_size - cur_promo_size;
  8710     if (PrintAdaptiveSizePolicy && Verbose) {
  8711       gclog_or_tty->print_cr(" ASConcurrentMarkSweepGeneration::resize "
  8712         "Expanding tenured generation by " SIZE_FORMAT " (bytes)",
  8713         expand_bytes);
  8715     expand(expand_bytes,
  8716            MinHeapDeltaBytes,
  8717            CMSExpansionCause::_adaptive_size_policy);
  8718   } else if (desired_promo_size < cur_promo_size) {
  8719     size_t shrink_bytes = cur_promo_size - desired_promo_size;
  8720     if (PrintAdaptiveSizePolicy && Verbose) {
  8721       gclog_or_tty->print_cr(" ASConcurrentMarkSweepGeneration::resize "
  8722         "Shrinking tenured generation by " SIZE_FORMAT " (bytes)",
  8723         shrink_bytes);
  8725     shrink(shrink_bytes);
  8729 CMSGCAdaptivePolicyCounters* ASConcurrentMarkSweepGeneration::gc_adaptive_policy_counters() {
  8730   GenCollectedHeap* gch = GenCollectedHeap::heap();
  8731   CMSGCAdaptivePolicyCounters* counters =
  8732     (CMSGCAdaptivePolicyCounters*) gch->collector_policy()->counters();
  8733   assert(counters->kind() == GCPolicyCounters::CMSGCAdaptivePolicyCountersKind,
  8734     "Wrong kind of counters");
  8735   return counters;
  8739 void ASConcurrentMarkSweepGeneration::update_counters() {
  8740   if (UsePerfData) {
  8741     _space_counters->update_all();
  8742     _gen_counters->update_all();
  8743     CMSGCAdaptivePolicyCounters* counters = gc_adaptive_policy_counters();
  8744     GenCollectedHeap* gch = GenCollectedHeap::heap();
  8745     CMSGCStats* gc_stats_l = (CMSGCStats*) gc_stats();
  8746     assert(gc_stats_l->kind() == GCStats::CMSGCStatsKind,
  8747       "Wrong gc statistics type");
  8748     counters->update_counters(gc_stats_l);
  8752 void ASConcurrentMarkSweepGeneration::update_counters(size_t used) {
  8753   if (UsePerfData) {
  8754     _space_counters->update_used(used);
  8755     _space_counters->update_capacity();
  8756     _gen_counters->update_all();
  8758     CMSGCAdaptivePolicyCounters* counters = gc_adaptive_policy_counters();
  8759     GenCollectedHeap* gch = GenCollectedHeap::heap();
  8760     CMSGCStats* gc_stats_l = (CMSGCStats*) gc_stats();
  8761     assert(gc_stats_l->kind() == GCStats::CMSGCStatsKind,
  8762       "Wrong gc statistics type");
  8763     counters->update_counters(gc_stats_l);
  8767 // The desired expansion delta is computed so that:
  8768 // . desired free percentage or greater is used
  8769 void ASConcurrentMarkSweepGeneration::compute_new_size() {
  8770   assert_locked_or_safepoint(Heap_lock);
  8772   GenCollectedHeap* gch = (GenCollectedHeap*) GenCollectedHeap::heap();
  8774   // If incremental collection failed, we just want to expand
  8775   // to the limit.
  8776   if (incremental_collection_failed()) {
  8777     clear_incremental_collection_failed();
  8778     grow_to_reserved();
  8779     return;
  8782   assert(UseAdaptiveSizePolicy, "Should be using adaptive sizing");
  8784   assert(gch->kind() == CollectedHeap::GenCollectedHeap,
  8785     "Wrong type of heap");
  8786   int prev_level = level() - 1;
  8787   assert(prev_level >= 0, "The cms generation is the lowest generation");
  8788   Generation* prev_gen = gch->get_gen(prev_level);
  8789   assert(prev_gen->kind() == Generation::ASParNew,
  8790     "Wrong type of young generation");
  8791   ParNewGeneration* younger_gen = (ParNewGeneration*) prev_gen;
  8792   size_t cur_eden = younger_gen->eden()->capacity();
  8793   CMSAdaptiveSizePolicy* size_policy = cms_size_policy();
  8794   size_t cur_promo = free();
  8795   size_policy->compute_tenured_generation_free_space(cur_promo,
  8796                                                        max_available(),
  8797                                                        cur_eden);
  8798   resize(cur_promo, size_policy->promo_size());
  8800   // Record the new size of the space in the cms generation
  8801   // that is available for promotions.  This is temporary.
  8802   // It should be the desired promo size.
  8803   size_policy->avg_cms_promo()->sample(free());
  8804   size_policy->avg_old_live()->sample(used());
  8806   if (UsePerfData) {
  8807     CMSGCAdaptivePolicyCounters* counters = gc_adaptive_policy_counters();
  8808     counters->update_cms_capacity_counter(capacity());
  8812 void ASConcurrentMarkSweepGeneration::shrink_by(size_t desired_bytes) {
  8813   assert_locked_or_safepoint(Heap_lock);
  8814   assert_lock_strong(freelistLock());
  8815   HeapWord* old_end = _cmsSpace->end();
  8816   HeapWord* unallocated_start = _cmsSpace->unallocated_block();
  8817   assert(old_end >= unallocated_start, "Miscalculation of unallocated_start");
  8818   FreeChunk* chunk_at_end = find_chunk_at_end();
  8819   if (chunk_at_end == NULL) {
  8820     // No room to shrink
  8821     if (PrintGCDetails && Verbose) {
  8822       gclog_or_tty->print_cr("No room to shrink: old_end  "
  8823         PTR_FORMAT "  unallocated_start  " PTR_FORMAT
  8824         " chunk_at_end  " PTR_FORMAT,
  8825         old_end, unallocated_start, chunk_at_end);
  8827     return;
  8828   } else {
  8830     // Find the chunk at the end of the space and determine
  8831     // how much it can be shrunk.
  8832     size_t shrinkable_size_in_bytes = chunk_at_end->size();
  8833     size_t aligned_shrinkable_size_in_bytes =
  8834       align_size_down(shrinkable_size_in_bytes, os::vm_page_size());
  8835     assert(unallocated_start <= chunk_at_end->end(),
  8836       "Inconsistent chunk at end of space");
  8837     size_t bytes = MIN2(desired_bytes, aligned_shrinkable_size_in_bytes);
  8838     size_t word_size_before = heap_word_size(_virtual_space.committed_size());
  8840     // Shrink the underlying space
  8841     _virtual_space.shrink_by(bytes);
  8842     if (PrintGCDetails && Verbose) {
  8843       gclog_or_tty->print_cr("ConcurrentMarkSweepGeneration::shrink_by:"
  8844         " desired_bytes " SIZE_FORMAT
  8845         " shrinkable_size_in_bytes " SIZE_FORMAT
  8846         " aligned_shrinkable_size_in_bytes " SIZE_FORMAT
  8847         "  bytes  " SIZE_FORMAT,
  8848         desired_bytes, shrinkable_size_in_bytes,
  8849         aligned_shrinkable_size_in_bytes, bytes);
  8850       gclog_or_tty->print_cr("          old_end  " SIZE_FORMAT
  8851         "  unallocated_start  " SIZE_FORMAT,
  8852         old_end, unallocated_start);
  8855     // If the space did shrink (shrinking is not guaranteed),
  8856     // shrink the chunk at the end by the appropriate amount.
  8857     if (((HeapWord*)_virtual_space.high()) < old_end) {
  8858       size_t new_word_size =
  8859         heap_word_size(_virtual_space.committed_size());
  8861       // Have to remove the chunk from the dictionary because it is changing
  8862       // size and might be someplace elsewhere in the dictionary.
  8864       // Get the chunk at end, shrink it, and put it
  8865       // back.
  8866       _cmsSpace->removeChunkFromDictionary(chunk_at_end);
  8867       size_t word_size_change = word_size_before - new_word_size;
  8868       size_t chunk_at_end_old_size = chunk_at_end->size();
  8869       assert(chunk_at_end_old_size >= word_size_change,
  8870         "Shrink is too large");
  8871       chunk_at_end->setSize(chunk_at_end_old_size -
  8872                           word_size_change);
  8873       _cmsSpace->freed((HeapWord*) chunk_at_end->end(),
  8874         word_size_change);
  8876       _cmsSpace->returnChunkToDictionary(chunk_at_end);
  8878       MemRegion mr(_cmsSpace->bottom(), new_word_size);
  8879       _bts->resize(new_word_size);  // resize the block offset shared array
  8880       Universe::heap()->barrier_set()->resize_covered_region(mr);
  8881       _cmsSpace->assert_locked();
  8882       _cmsSpace->set_end((HeapWord*)_virtual_space.high());
  8884       NOT_PRODUCT(_cmsSpace->dictionary()->verify());
  8886       // update the space and generation capacity counters
  8887       if (UsePerfData) {
  8888         _space_counters->update_capacity();
  8889         _gen_counters->update_all();
  8892       if (Verbose && PrintGCDetails) {
  8893         size_t new_mem_size = _virtual_space.committed_size();
  8894         size_t old_mem_size = new_mem_size + bytes;
  8895         gclog_or_tty->print_cr("Shrinking %s from %ldK by %ldK to %ldK",
  8896                       name(), old_mem_size/K, bytes/K, new_mem_size/K);
  8900     assert(_cmsSpace->unallocated_block() <= _cmsSpace->end(),
  8901       "Inconsistency at end of space");
  8902     assert(chunk_at_end->end() == _cmsSpace->end(),
  8903       "Shrinking is inconsistent");
  8904     return;
  8908 // Transfer some number of overflown objects to usual marking
  8909 // stack. Return true if some objects were transferred.
  8910 bool MarkRefsIntoAndScanClosure::take_from_overflow_list() {
  8911   size_t num = MIN2((size_t)_mark_stack->capacity()/4,
  8912                     (size_t)ParGCDesiredObjsFromOverflowList);
  8914   bool res = _collector->take_from_overflow_list(num, _mark_stack);
  8915   assert(_collector->overflow_list_is_empty() || res,
  8916          "If list is not empty, we should have taken something");
  8917   assert(!res || !_mark_stack->isEmpty(),
  8918          "If we took something, it should now be on our stack");
  8919   return res;
  8922 size_t MarkDeadObjectsClosure::do_blk(HeapWord* addr) {
  8923   size_t res = _sp->block_size_no_stall(addr, _collector);
  8924   assert(res != 0, "Should always be able to compute a size");
  8925   if (_sp->block_is_obj(addr)) {
  8926     if (_live_bit_map->isMarked(addr)) {
  8927       // It can't have been dead in a previous cycle
  8928       guarantee(!_dead_bit_map->isMarked(addr), "No resurrection!");
  8929     } else {
  8930       _dead_bit_map->mark(addr);      // mark the dead object
  8933   return res;

mercurial