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

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

author
johnc
date
Mon, 03 Aug 2009 12:59:30 -0700
changeset 1324
15c5903cf9e1
parent 1280
df6caf649ff7
child 1696
0414c1049f15
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@1014 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 following OopClosure types get specialized versions of
ysr@777 26 // "oop_oop_iterate" that invoke the closures' do_oop methods
ysr@777 27 // non-virtually, using a mechanism defined in this file. Extend these
ysr@777 28 // macros in the obvious way to add specializations for new closures.
ysr@777 29
ysr@777 30 // Forward declarations.
ysr@777 31 enum G1Barrier {
ysr@777 32 G1BarrierNone, G1BarrierRS, G1BarrierEvac
ysr@777 33 };
ysr@777 34
tonyp@961 35 template<bool do_gen_barrier, G1Barrier barrier,
tonyp@961 36 bool do_mark_forwardee, bool skip_cset_test>
ysr@777 37 class G1ParCopyClosure;
ysr@777 38 class G1ParScanClosure;
ysr@777 39
ysr@1280 40 typedef G1ParCopyClosure<false, G1BarrierEvac, false, true> G1ParScanHeapEvacClosure;
ysr@777 41
ysr@777 42 class FilterIntoCSClosure;
ysr@777 43 class FilterOutOfRegionClosure;
ysr@777 44 class FilterInHeapRegionAndIntoCSClosure;
ysr@777 45 class FilterAndMarkInHeapRegionAndIntoCSClosure;
ysr@777 46
ysr@777 47 #ifdef FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES
ysr@777 48 #error "FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES already defined."
ysr@777 49 #endif
ysr@777 50
ysr@777 51 #define FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES(f) \
ysr@777 52 f(G1ParScanHeapEvacClosure,_nv) \
ysr@777 53 f(G1ParScanClosure,_nv) \
ysr@777 54 f(FilterIntoCSClosure,_nv) \
ysr@777 55 f(FilterOutOfRegionClosure,_nv) \
ysr@777 56 f(FilterInHeapRegionAndIntoCSClosure,_nv) \
ysr@1280 57 f(FilterAndMarkInHeapRegionAndIntoCSClosure,_nv)
ysr@777 58
ysr@777 59 #ifdef FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES
ysr@777 60 #error "FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES already defined."
ysr@777 61 #endif
ysr@777 62
ysr@777 63 #define FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(f)

mercurial