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

Thu, 22 Sep 2011 10:57:37 -0700

author
johnc
date
Thu, 22 Sep 2011 10:57:37 -0700
changeset 3175
4dfb2df418f2
parent 3086
eeae91c9baba
child 3466
b4ebad3520bb
permissions
-rw-r--r--

6484982: G1: process references during evacuation pauses
Summary: G1 now uses two reference processors - one is used by concurrent marking and the other is used by STW GCs (both full and incremental evacuation pauses). In an evacuation pause, the reference processor is embedded into the closures used to scan objects. Doing so causes causes reference objects to be 'discovered' by the reference processor. At the end of the evacuation pause, these discovered reference objects are processed - preserving (and copying) referent objects (and their reachable graphs) as appropriate.
Reviewed-by: ysr, jwilhelm, brutisso, stefank, tonyp

ysr@777 1 /*
tonyp@2962 2 * Copyright (c) 2001, 2011, Oracle and/or its affiliates. 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 *
trims@1907 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
trims@1907 20 * or visit www.oracle.com if you need additional information or have any
trims@1907 21 * questions.
ysr@777 22 *
ysr@777 23 */
ysr@777 24
stefank@2314 25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1_SPECIALIZED_OOP_CLOSURES_HPP
stefank@2314 26 #define SHARE_VM_GC_IMPLEMENTATION_G1_G1_SPECIALIZED_OOP_CLOSURES_HPP
stefank@2314 27
ysr@777 28 // The following OopClosure types get specialized versions of
ysr@777 29 // "oop_oop_iterate" that invoke the closures' do_oop methods
ysr@777 30 // non-virtually, using a mechanism defined in this file. Extend these
ysr@777 31 // macros in the obvious way to add specializations for new closures.
ysr@777 32
ysr@777 33 // Forward declarations.
ysr@777 34 enum G1Barrier {
ysr@777 35 G1BarrierNone, G1BarrierRS, G1BarrierEvac
ysr@777 36 };
ysr@777 37
tonyp@961 38 template<bool do_gen_barrier, G1Barrier barrier,
johnc@3086 39 bool do_mark_object>
ysr@777 40 class G1ParCopyClosure;
ysr@777 41 class G1ParScanClosure;
iveresov@1696 42 class G1ParPushHeapRSClosure;
ysr@777 43
iveresov@1696 44 typedef G1ParCopyClosure<false, G1BarrierEvac, false> G1ParScanHeapEvacClosure;
ysr@777 45
ysr@777 46 class FilterIntoCSClosure;
ysr@777 47 class FilterOutOfRegionClosure;
tonyp@2968 48 class G1CMOopClosure;
ysr@777 49
ysr@777 50 #ifdef FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES
ysr@777 51 #error "FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES already defined."
ysr@777 52 #endif
ysr@777 53
ysr@777 54 #define FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES(f) \
ysr@777 55 f(G1ParScanHeapEvacClosure,_nv) \
ysr@777 56 f(G1ParScanClosure,_nv) \
iveresov@1696 57 f(G1ParPushHeapRSClosure,_nv) \
ysr@777 58 f(FilterIntoCSClosure,_nv) \
tonyp@2968 59 f(FilterOutOfRegionClosure,_nv) \
tonyp@2968 60 f(G1CMOopClosure,_nv)
ysr@777 61
ysr@777 62 #ifdef FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES
ysr@777 63 #error "FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES already defined."
ysr@777 64 #endif
ysr@777 65
ysr@777 66 #define FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(f)
stefank@2314 67
stefank@2314 68 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1_SPECIALIZED_OOP_CLOSURES_HPP

mercurial