Mon, 08 Dec 2014 18:57:33 +0100
8067655: Clean up G1 remembered set oop iteration
Summary: Pass on the static type G1ParPushHeapRSClosure to allow oop_iterate devirtualization
Reviewed-by: jmasa, kbarrett
1 /*
2 * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
25 #include "precompiled.hpp"
26 #include "gc_implementation/g1/g1HRPrinter.hpp"
27 #include "gc_implementation/g1/heapRegion.hpp"
28 #include "utilities/ostream.hpp"
30 PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
32 const char* G1HRPrinter::action_name(ActionType action) {
33 switch(action) {
34 case Alloc: return "ALLOC";
35 case AllocForce: return "ALLOC-FORCE";
36 case Retire: return "RETIRE";
37 case Reuse: return "REUSE";
38 case CSet: return "CSET";
39 case EvacFailure: return "EVAC-FAILURE";
40 case Cleanup: return "CLEANUP";
41 case PostCompaction: return "POST-COMPACTION";
42 case Commit: return "COMMIT";
43 case Uncommit: return "UNCOMMIT";
44 default: ShouldNotReachHere();
45 }
46 // trying to keep the Windows compiler happy
47 return NULL;
48 }
50 const char* G1HRPrinter::region_type_name(RegionType type) {
51 switch (type) {
52 case Unset: return NULL;
53 case Eden: return "Eden";
54 case Survivor: return "Survivor";
55 case Old: return "Old";
56 case SingleHumongous: return "SingleH";
57 case StartsHumongous: return "StartsH";
58 case ContinuesHumongous: return "ContinuesH";
59 default: ShouldNotReachHere();
60 }
61 // trying to keep the Windows compiler happy
62 return NULL;
63 }
65 const char* G1HRPrinter::phase_name(PhaseType phase) {
66 switch (phase) {
67 case StartGC: return "StartGC";
68 case EndGC: return "EndGC";
69 case StartFullGC: return "StartFullGC";
70 case EndFullGC: return "EndFullGC";
71 default: ShouldNotReachHere();
72 }
73 // trying to keep the Windows compiler happy
74 return NULL;
75 }
77 #define G1HR_PREFIX " G1HR"
79 void G1HRPrinter::print(ActionType action, RegionType type,
80 HeapRegion* hr, HeapWord* top) {
81 const char* action_str = action_name(action);
82 const char* type_str = region_type_name(type);
83 HeapWord* bottom = hr->bottom();
85 if (type_str != NULL) {
86 if (top != NULL) {
87 gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) "PTR_FORMAT" "PTR_FORMAT,
88 action_str, type_str, bottom, top);
89 } else {
90 gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) "PTR_FORMAT,
91 action_str, type_str, bottom);
92 }
93 } else {
94 if (top != NULL) {
95 gclog_or_tty->print_cr(G1HR_PREFIX" %s "PTR_FORMAT" "PTR_FORMAT,
96 action_str, bottom, top);
97 } else {
98 gclog_or_tty->print_cr(G1HR_PREFIX" %s "PTR_FORMAT,
99 action_str, bottom);
100 }
101 }
102 }
104 void G1HRPrinter::print(ActionType action, HeapWord* bottom, HeapWord* end) {
105 const char* action_str = action_name(action);
107 gclog_or_tty->print_cr(G1HR_PREFIX" %s ["PTR_FORMAT","PTR_FORMAT"]",
108 action_str, bottom, end);
109 }
111 void G1HRPrinter::print(PhaseType phase, size_t phase_num) {
112 const char* phase_str = phase_name(phase);
113 gclog_or_tty->print_cr(G1HR_PREFIX" #%s "SIZE_FORMAT, phase_str, phase_num);
114 }