comparison src/share/vm/gc_implementation/g1/g1_specialized_oop_closures.hpp @ 4839:b4ebad3520bb

7133038: G1: Some small profile based optimizations Summary: Some minor profile based optimizations. Reduce the number of branches and branch mispredicts by removing some virtual calls, through closure specalization, and refactoring some conditional statements. Reviewed-by: brutisso, tonyp
author johnc
date Thu, 26 Jan 2012 14:14:55 -0800
parents eeae91c9baba
children da91efe96a93
comparison
equal deleted inserted replaced
4838:a5244e07b761 4839:b4ebad3520bb
1 /* 1 /*
2 * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
30 // non-virtually, using a mechanism defined in this file. Extend these 30 // non-virtually, using a mechanism defined in this file. Extend these
31 // macros in the obvious way to add specializations for new closures. 31 // macros in the obvious way to add specializations for new closures.
32 32
33 // Forward declarations. 33 // Forward declarations.
34 enum G1Barrier { 34 enum G1Barrier {
35 G1BarrierNone, G1BarrierRS, G1BarrierEvac 35 G1BarrierNone,
36 G1BarrierRS,
37 G1BarrierEvac
36 }; 38 };
37 39
38 template<bool do_gen_barrier, G1Barrier barrier, 40 template<bool do_gen_barrier, G1Barrier barrier, bool do_mark_object>
39 bool do_mark_object>
40 class G1ParCopyClosure; 41 class G1ParCopyClosure;
42
41 class G1ParScanClosure; 43 class G1ParScanClosure;
42 class G1ParPushHeapRSClosure; 44 class G1ParPushHeapRSClosure;
43 45
44 typedef G1ParCopyClosure<false, G1BarrierEvac, false> G1ParScanHeapEvacClosure; 46 typedef G1ParCopyClosure<false, G1BarrierEvac, false> G1ParScanHeapEvacClosure;
45 47
46 class FilterIntoCSClosure; 48 class FilterIntoCSClosure;
47 class FilterOutOfRegionClosure; 49 class FilterOutOfRegionClosure;
48 class G1CMOopClosure; 50 class G1CMOopClosure;
51 class G1RootRegionScanClosure;
52
53 // Specialized oop closures from g1RemSet.cpp
54 class G1Mux2Closure;
55 class G1TriggerClosure;
56 class G1InvokeIfNotTriggeredClosure;
57 class G1UpdateRSOrPushRefOopClosure;
49 58
50 #ifdef FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES 59 #ifdef FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES
51 #error "FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES already defined." 60 #error "FURTHER_SPECIALIZED_OOP_OOP_ITERATE_CLOSURES already defined."
52 #endif 61 #endif
53 62
55 f(G1ParScanHeapEvacClosure,_nv) \ 64 f(G1ParScanHeapEvacClosure,_nv) \
56 f(G1ParScanClosure,_nv) \ 65 f(G1ParScanClosure,_nv) \
57 f(G1ParPushHeapRSClosure,_nv) \ 66 f(G1ParPushHeapRSClosure,_nv) \
58 f(FilterIntoCSClosure,_nv) \ 67 f(FilterIntoCSClosure,_nv) \
59 f(FilterOutOfRegionClosure,_nv) \ 68 f(FilterOutOfRegionClosure,_nv) \
60 f(G1CMOopClosure,_nv) 69 f(G1CMOopClosure,_nv) \
70 f(G1RootRegionScanClosure,_nv) \
71 f(G1Mux2Closure,_nv) \
72 f(G1TriggerClosure,_nv) \
73 f(G1InvokeIfNotTriggeredClosure,_nv) \
74 f(G1UpdateRSOrPushRefOopClosure,_nv)
61 75
62 #ifdef FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES 76 #ifdef FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES
63 #error "FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES already defined." 77 #error "FURTHER_SPECIALIZED_SINCE_SAVE_MARKS_CLOSURES already defined."
64 #endif 78 #endif
65 79