src/share/vm/gc_implementation/g1/concurrentMarkThread.hpp

Mon, 03 Aug 2009 12:59:30 -0700

author
johnc
date
Mon, 03 Aug 2009 12:59:30 -0700
changeset 1324
15c5903cf9e1
parent 1279
bd02caa94611
child 1454
035d2e036a9b
permissions
-rw-r--r--

6865703: G1: Parallelize hot card cache cleanup
Summary: Have the GC worker threads clear the hot card cache in parallel by having each worker thread claim a chunk of the card cache and process the cards in that chunk. The size of the chunks that each thread will claim is determined at VM initialization from the size of the card cache and the number of worker threads.
Reviewed-by: jmasa, tonyp

ysr@777 1 /*
xdono@1279 2 * Copyright 2001-2009 Sun Microsystems, Inc. All Rights Reserved.
ysr@777 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ysr@777 4 *
ysr@777 5 * This code is free software; you can redistribute it and/or modify it
ysr@777 6 * under the terms of the GNU General Public License version 2 only, as
ysr@777 7 * published by the Free Software Foundation.
ysr@777 8 *
ysr@777 9 * This code is distributed in the hope that it will be useful, but WITHOUT
ysr@777 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ysr@777 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
ysr@777 12 * version 2 for more details (a copy is included in the LICENSE file that
ysr@777 13 * accompanied this code).
ysr@777 14 *
ysr@777 15 * You should have received a copy of the GNU General Public License version
ysr@777 16 * 2 along with this work; if not, write to the Free Software Foundation,
ysr@777 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ysr@777 18 *
ysr@777 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
ysr@777 20 * CA 95054 USA or visit www.sun.com if you need additional information or
ysr@777 21 * have any questions.
ysr@777 22 *
ysr@777 23 */
ysr@777 24
ysr@777 25 // The Concurrent Mark GC Thread (could be several in the future).
ysr@777 26 // This is copied from the Concurrent Mark Sweep GC Thread
ysr@777 27 // Still under construction.
ysr@777 28
ysr@777 29 class ConcurrentMark;
ysr@777 30
ysr@777 31 class ConcurrentMarkThread: public ConcurrentGCThread {
ysr@777 32 friend class VMStructs;
ysr@777 33
ysr@777 34 double _vtime_start; // Initial virtual time.
ysr@777 35 double _vtime_accum; // Accumulated virtual time.
ysr@777 36
ysr@777 37 double _vtime_mark_accum;
ysr@777 38 double _vtime_count_accum;
ysr@777 39
ysr@777 40 public:
ysr@777 41 virtual void run();
ysr@777 42
ysr@777 43 private:
ysr@777 44 ConcurrentMark* _cm;
ysr@777 45 bool _started;
ysr@777 46 bool _in_progress;
ysr@777 47
ysr@777 48 void sleepBeforeNextCycle();
ysr@777 49
ysr@777 50 static SurrogateLockerThread* _slt;
ysr@777 51
ysr@777 52 public:
ysr@777 53 // Constructor
ysr@777 54 ConcurrentMarkThread(ConcurrentMark* cm);
ysr@777 55
ysr@777 56 static void makeSurrogateLockerThread(TRAPS);
ysr@777 57 static SurrogateLockerThread* slt() { return _slt; }
ysr@777 58
ysr@777 59 // Printing
ysr@777 60 void print();
ysr@777 61
ysr@777 62 // Total virtual time so far.
ysr@777 63 double vtime_accum();
ysr@777 64 // Marking virtual time so far
ysr@777 65 double vtime_mark_accum();
ysr@777 66 // Counting virtual time so far.
ysr@777 67 double vtime_count_accum() { return _vtime_count_accum; }
ysr@777 68
ysr@777 69 ConcurrentMark* cm() { return _cm; }
ysr@777 70
ysr@777 71 void set_started() { _started = true; }
ysr@777 72 void clear_started() { _started = false; }
ysr@777 73 bool started() { return _started; }
ysr@777 74
ysr@777 75 void set_in_progress() { _in_progress = true; }
ysr@777 76 void clear_in_progress() { _in_progress = false; }
ysr@777 77 bool in_progress() { return _in_progress; }
ysr@777 78
ysr@777 79 // Yield for GC
ysr@777 80 void yield();
ysr@777 81
ysr@777 82 // shutdown
iveresov@1229 83 void stop();
ysr@777 84 };

mercurial