src/share/vm/gc_implementation/g1/concurrentZFThread.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 1371
e1fdf4fd34dc
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 ZF Thread. Performs concurrent zero-filling.
ysr@777 26
ysr@777 27 class ConcurrentZFThread: public ConcurrentGCThread {
ysr@777 28 friend class VMStructs;
ysr@777 29 friend class ZeroFillRegionClosure;
ysr@777 30
ysr@777 31 private:
ysr@777 32
ysr@777 33 // Zero fill the heap region.
ysr@777 34 void processHeapRegion(HeapRegion* r);
ysr@777 35
ysr@777 36 // Stats
ysr@777 37 // Allocation (protected by heap lock).
ysr@777 38 static int _region_allocs; // Number of regions allocated
ysr@777 39 static int _sync_zfs; // Synchronous zero-fills +
ysr@777 40 static int _zf_waits; // Wait for conc zero-fill completion.
ysr@777 41
ysr@777 42 // Number of regions CFZ thread fills.
ysr@777 43 static int _regions_filled;
ysr@777 44
ysr@777 45 COTracker _co_tracker;
ysr@777 46
ysr@777 47 double _vtime_start; // Initial virtual time.
ysr@777 48
ysr@777 49 // These are static because the "print_summary_info" method is, and
ysr@777 50 // it currently assumes there is only one ZF thread. We'll change when
ysr@777 51 // we need to.
ysr@777 52 static double _vtime_accum; // Initial virtual time.
ysr@777 53 static double vtime_accum() { return _vtime_accum; }
ysr@777 54
ysr@777 55 // Offer yield for GC. Returns true if yield occurred.
ysr@777 56 bool offer_yield();
ysr@777 57
ysr@777 58 public:
ysr@777 59 // Constructor
ysr@777 60 ConcurrentZFThread();
ysr@777 61
ysr@777 62 // Main loop.
ysr@777 63 virtual void run();
ysr@777 64
ysr@777 65 // Printing
ysr@777 66 void print();
ysr@777 67
ysr@777 68 // Waits until "r" has been zero-filled. Requires caller to hold the
ysr@777 69 // ZF_mon.
ysr@777 70 static void wait_for_ZF_completed(HeapRegion* r);
ysr@777 71
ysr@777 72 // Get or clear the current unclean region. Should be done
ysr@777 73 // while holding the ZF_needed_mon lock.
ysr@777 74
ysr@777 75 // shutdown
iveresov@1229 76 void stop();
ysr@777 77
ysr@777 78 // Stats
ysr@777 79 static void note_region_alloc() {_region_allocs++; }
ysr@777 80 static void note_sync_zfs() { _sync_zfs++; }
ysr@777 81 static void note_zf_wait() { _zf_waits++; }
ysr@777 82 static void note_region_filled() { _regions_filled++; }
ysr@777 83
ysr@777 84 static void print_summary_info();
ysr@777 85 };

mercurial