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

Fri, 10 Oct 2014 15:51:58 +0200

author
tschatzl
date
Fri, 10 Oct 2014 15:51:58 +0200
changeset 7257
e7d0505c8a30
parent 6992
2c6ef90f030a
child 7535
7ae4e26cb1e0
permissions
-rw-r--r--

8059758: Footprint regressions with JDK-8038423
Summary: Changes in JDK-8038423 always initialize (zero out) virtual memory used for auxiliary data structures. This causes a footprint regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything.
Reviewed-by: jwilhelm, brutisso

ysr@777 1 /*
johnc@3466 2 * Copyright (c) 2001, 2012, 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 enum G1Barrier {
johnc@3466 34 G1BarrierNone,
coleenp@4037 35 G1BarrierEvac,
coleenp@4037 36 G1BarrierKlass
ysr@777 37 };
ysr@777 38
stefank@6992 39 enum G1Mark {
stefank@6992 40 G1MarkNone,
stefank@6992 41 G1MarkFromRoot,
stefank@6992 42 G1MarkPromotedFromRoot
stefank@6992 43 };
stefank@6992 44
stefank@6992 45 // Forward declarations.
stefank@6992 46
stefank@6992 47 template<G1Barrier barrier, G1Mark do_mark_object>
ysr@777 48 class G1ParCopyClosure;
johnc@3466 49
ysr@777 50 class G1ParScanClosure;
iveresov@1696 51 class G1ParPushHeapRSClosure;
ysr@777 52
ysr@777 53 class FilterIntoCSClosure;
ysr@777 54 class FilterOutOfRegionClosure;
tonyp@2968 55 class G1CMOopClosure;
johnc@3466 56 class G1RootRegionScanClosure;
johnc@3466 57
johnc@3466 58 // Specialized oop closures from g1RemSet.cpp
johnc@3466 59 class G1Mux2Closure;
johnc@3466 60 class G1TriggerClosure;
johnc@3466 61 class G1InvokeIfNotTriggeredClosure;
johnc@3466 62 class G1UpdateRSOrPushRefOopClosure;
ysr@777 63
ysr@777 64 #ifdef FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES
ysr@777 65 #error "FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES already defined."
ysr@777 66 #endif
ysr@777 67
ysr@777 68 #define FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES(f) \
ysr@777 69 f(G1ParScanClosure,_nv) \
iveresov@1696 70 f(G1ParPushHeapRSClosure,_nv) \
ysr@777 71 f(FilterIntoCSClosure,_nv) \
tonyp@2968 72 f(FilterOutOfRegionClosure,_nv) \
johnc@3466 73 f(G1CMOopClosure,_nv) \
johnc@3466 74 f(G1RootRegionScanClosure,_nv) \
johnc@3466 75 f(G1Mux2Closure,_nv) \
johnc@3466 76 f(G1TriggerClosure,_nv) \
johnc@3466 77 f(G1InvokeIfNotTriggeredClosure,_nv) \
johnc@3466 78 f(G1UpdateRSOrPushRefOopClosure,_nv)
ysr@777 79
ysr@777 80 #ifdef FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES
ysr@777 81 #error "FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES already defined."
ysr@777 82 #endif
ysr@777 83
ysr@777 84 #define FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES(f)
stefank@2314 85
stefank@2314 86 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1_SPECIALIZED_OOP_CLOSURES_HPP

mercurial