annotate src/share/vm/services/runtimeService.cpp @ 1721:413ad0331a0c

6977924: Changes for 6975078 produce build error with certain gcc versions Summary: The changes introduced for 6975078 assign badHeapOopVal to the _allocation field in the ResourceObj class. In 32 bit linux builds with certain versions of gcc this assignment will be flagged as an error while compiling allocation.cpp. In 32 bit builds the constant value badHeapOopVal (which is cast to an intptr_t) is negative. The _allocation field is typed as an unsigned intptr_t and gcc catches this as an error. Reviewed-by: jcoomes, ysr, phh
author johnc
date Wed, 18 Aug 2010 10:59:06 -0700
parents c18cbe5936b8
children f95d63e2154a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1260
diff changeset
2 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1260
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1260
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1260
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
a61af66fc99e Initial load
duke
parents:
diff changeset
25 # include "incls/_precompiled.incl"
a61af66fc99e Initial load
duke
parents:
diff changeset
26 # include "incls/_runtimeService.cpp.incl"
a61af66fc99e Initial load
duke
parents:
diff changeset
27
a61af66fc99e Initial load
duke
parents:
diff changeset
28 HS_DTRACE_PROBE_DECL(hs_private, safepoint__begin);
a61af66fc99e Initial load
duke
parents:
diff changeset
29 HS_DTRACE_PROBE_DECL(hs_private, safepoint__end);
a61af66fc99e Initial load
duke
parents:
diff changeset
30
a61af66fc99e Initial load
duke
parents:
diff changeset
31 TimeStamp RuntimeService::_app_timer;
a61af66fc99e Initial load
duke
parents:
diff changeset
32 TimeStamp RuntimeService::_safepoint_timer;
a61af66fc99e Initial load
duke
parents:
diff changeset
33 PerfCounter* RuntimeService::_sync_time_ticks = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
34 PerfCounter* RuntimeService::_total_safepoints = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
35 PerfCounter* RuntimeService::_safepoint_time_ticks = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
36 PerfCounter* RuntimeService::_application_time_ticks = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
37 PerfCounter* RuntimeService::_thread_interrupt_signaled_count = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
38 PerfCounter* RuntimeService::_interrupted_before_count = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
39 PerfCounter* RuntimeService::_interrupted_during_count = NULL;
a61af66fc99e Initial load
duke
parents:
diff changeset
40
a61af66fc99e Initial load
duke
parents:
diff changeset
41 void RuntimeService::init() {
a61af66fc99e Initial load
duke
parents:
diff changeset
42 // Make sure the VM version is initialized
a61af66fc99e Initial load
duke
parents:
diff changeset
43 Abstract_VM_Version::initialize();
a61af66fc99e Initial load
duke
parents:
diff changeset
44
a61af66fc99e Initial load
duke
parents:
diff changeset
45 if (UsePerfData) {
a61af66fc99e Initial load
duke
parents:
diff changeset
46 EXCEPTION_MARK;
a61af66fc99e Initial load
duke
parents:
diff changeset
47
a61af66fc99e Initial load
duke
parents:
diff changeset
48 _sync_time_ticks =
a61af66fc99e Initial load
duke
parents:
diff changeset
49 PerfDataManager::create_counter(SUN_RT, "safepointSyncTime",
a61af66fc99e Initial load
duke
parents:
diff changeset
50 PerfData::U_Ticks, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
51
a61af66fc99e Initial load
duke
parents:
diff changeset
52 _total_safepoints =
a61af66fc99e Initial load
duke
parents:
diff changeset
53 PerfDataManager::create_counter(SUN_RT, "safepoints",
a61af66fc99e Initial load
duke
parents:
diff changeset
54 PerfData::U_Events, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
55
a61af66fc99e Initial load
duke
parents:
diff changeset
56 _safepoint_time_ticks =
a61af66fc99e Initial load
duke
parents:
diff changeset
57 PerfDataManager::create_counter(SUN_RT, "safepointTime",
a61af66fc99e Initial load
duke
parents:
diff changeset
58 PerfData::U_Ticks, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
59
a61af66fc99e Initial load
duke
parents:
diff changeset
60 _application_time_ticks =
a61af66fc99e Initial load
duke
parents:
diff changeset
61 PerfDataManager::create_counter(SUN_RT, "applicationTime",
a61af66fc99e Initial load
duke
parents:
diff changeset
62 PerfData::U_Ticks, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
63
a61af66fc99e Initial load
duke
parents:
diff changeset
64
a61af66fc99e Initial load
duke
parents:
diff changeset
65 // create performance counters for jvm_version and its capabilities
a61af66fc99e Initial load
duke
parents:
diff changeset
66 PerfDataManager::create_constant(SUN_RT, "jvmVersion", PerfData::U_None,
a61af66fc99e Initial load
duke
parents:
diff changeset
67 (jlong) Abstract_VM_Version::jvm_version(), CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
68
a61af66fc99e Initial load
duke
parents:
diff changeset
69 // I/O interruption related counters
a61af66fc99e Initial load
duke
parents:
diff changeset
70
a61af66fc99e Initial load
duke
parents:
diff changeset
71 // thread signaling via os::interrupt()
a61af66fc99e Initial load
duke
parents:
diff changeset
72
a61af66fc99e Initial load
duke
parents:
diff changeset
73 _thread_interrupt_signaled_count =
a61af66fc99e Initial load
duke
parents:
diff changeset
74 PerfDataManager::create_counter(SUN_RT,
a61af66fc99e Initial load
duke
parents:
diff changeset
75 "threadInterruptSignaled", PerfData::U_Events, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
76
a61af66fc99e Initial load
duke
parents:
diff changeset
77 // OS_INTRPT via "check before" in _INTERRUPTIBLE
a61af66fc99e Initial load
duke
parents:
diff changeset
78
a61af66fc99e Initial load
duke
parents:
diff changeset
79 _interrupted_before_count =
a61af66fc99e Initial load
duke
parents:
diff changeset
80 PerfDataManager::create_counter(SUN_RT, "interruptedBeforeIO",
a61af66fc99e Initial load
duke
parents:
diff changeset
81 PerfData::U_Events, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
82
a61af66fc99e Initial load
duke
parents:
diff changeset
83 // OS_INTRPT via "check during" in _INTERRUPTIBLE
a61af66fc99e Initial load
duke
parents:
diff changeset
84
a61af66fc99e Initial load
duke
parents:
diff changeset
85 _interrupted_during_count =
a61af66fc99e Initial load
duke
parents:
diff changeset
86 PerfDataManager::create_counter(SUN_RT, "interruptedDuringIO",
a61af66fc99e Initial load
duke
parents:
diff changeset
87 PerfData::U_Events, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
88
a61af66fc99e Initial load
duke
parents:
diff changeset
89 // The capabilities counter is a binary representation of the VM capabilities in string.
a61af66fc99e Initial load
duke
parents:
diff changeset
90 // This string respresentation simplifies the implementation of the client side
a61af66fc99e Initial load
duke
parents:
diff changeset
91 // to parse the value.
a61af66fc99e Initial load
duke
parents:
diff changeset
92 char capabilities[65];
a61af66fc99e Initial load
duke
parents:
diff changeset
93 size_t len = sizeof(capabilities);
a61af66fc99e Initial load
duke
parents:
diff changeset
94 memset((void*) capabilities, '0', len);
a61af66fc99e Initial load
duke
parents:
diff changeset
95 capabilities[len-1] = '\0';
a61af66fc99e Initial load
duke
parents:
diff changeset
96 capabilities[0] = AttachListener::is_attach_supported() ? '1' : '0';
a61af66fc99e Initial load
duke
parents:
diff changeset
97 #ifdef KERNEL
a61af66fc99e Initial load
duke
parents:
diff changeset
98 capabilities[1] = '1';
a61af66fc99e Initial load
duke
parents:
diff changeset
99 #endif // KERNEL
a61af66fc99e Initial load
duke
parents:
diff changeset
100 PerfDataManager::create_string_constant(SUN_RT, "jvmCapabilities",
a61af66fc99e Initial load
duke
parents:
diff changeset
101 capabilities, CHECK);
a61af66fc99e Initial load
duke
parents:
diff changeset
102 }
a61af66fc99e Initial load
duke
parents:
diff changeset
103 }
a61af66fc99e Initial load
duke
parents:
diff changeset
104
a61af66fc99e Initial load
duke
parents:
diff changeset
105 void RuntimeService::record_safepoint_begin() {
a61af66fc99e Initial load
duke
parents:
diff changeset
106 HS_DTRACE_PROBE(hs_private, safepoint__begin);
1260
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
107
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
108 // Print the time interval in which the app was executing
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
109 if (PrintGCApplicationConcurrentTime) {
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
110 gclog_or_tty->print_cr("Application time: %3.7f seconds",
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
111 last_application_time_sec());
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
112 }
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
113
0
a61af66fc99e Initial load
duke
parents:
diff changeset
114 // update the time stamp to begin recording safepoint time
a61af66fc99e Initial load
duke
parents:
diff changeset
115 _safepoint_timer.update();
a61af66fc99e Initial load
duke
parents:
diff changeset
116 if (UsePerfData) {
a61af66fc99e Initial load
duke
parents:
diff changeset
117 _total_safepoints->inc();
a61af66fc99e Initial load
duke
parents:
diff changeset
118 if (_app_timer.is_updated()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
119 _application_time_ticks->inc(_app_timer.ticks_since_update());
a61af66fc99e Initial load
duke
parents:
diff changeset
120 }
a61af66fc99e Initial load
duke
parents:
diff changeset
121 }
a61af66fc99e Initial load
duke
parents:
diff changeset
122 }
a61af66fc99e Initial load
duke
parents:
diff changeset
123
a61af66fc99e Initial load
duke
parents:
diff changeset
124 void RuntimeService::record_safepoint_synchronized() {
a61af66fc99e Initial load
duke
parents:
diff changeset
125 if (UsePerfData) {
a61af66fc99e Initial load
duke
parents:
diff changeset
126 _sync_time_ticks->inc(_safepoint_timer.ticks_since_update());
a61af66fc99e Initial load
duke
parents:
diff changeset
127 }
a61af66fc99e Initial load
duke
parents:
diff changeset
128 }
a61af66fc99e Initial load
duke
parents:
diff changeset
129
a61af66fc99e Initial load
duke
parents:
diff changeset
130 void RuntimeService::record_safepoint_end() {
a61af66fc99e Initial load
duke
parents:
diff changeset
131 HS_DTRACE_PROBE(hs_private, safepoint__end);
1260
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
132
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
133 // Print the time interval for which the app was stopped
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
134 // during the current safepoint operation.
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
135 if (PrintGCApplicationStoppedTime) {
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
136 gclog_or_tty->print_cr("Total time for which application threads "
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
137 "were stopped: %3.7f seconds",
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
138 last_safepoint_time_sec());
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
139 }
8859772195c6 6782663: Data produced by PrintGCApplicationConcurrentTime and PrintGCApplicationStoppedTime is not accurate.
johnc
parents: 0
diff changeset
140
0
a61af66fc99e Initial load
duke
parents:
diff changeset
141 // update the time stamp to begin recording app time
a61af66fc99e Initial load
duke
parents:
diff changeset
142 _app_timer.update();
a61af66fc99e Initial load
duke
parents:
diff changeset
143 if (UsePerfData) {
a61af66fc99e Initial load
duke
parents:
diff changeset
144 _safepoint_time_ticks->inc(_safepoint_timer.ticks_since_update());
a61af66fc99e Initial load
duke
parents:
diff changeset
145 }
a61af66fc99e Initial load
duke
parents:
diff changeset
146 }
a61af66fc99e Initial load
duke
parents:
diff changeset
147
a61af66fc99e Initial load
duke
parents:
diff changeset
148 void RuntimeService::record_application_start() {
a61af66fc99e Initial load
duke
parents:
diff changeset
149 // update the time stamp to begin recording app time
a61af66fc99e Initial load
duke
parents:
diff changeset
150 _app_timer.update();
a61af66fc99e Initial load
duke
parents:
diff changeset
151 }
a61af66fc99e Initial load
duke
parents:
diff changeset
152
a61af66fc99e Initial load
duke
parents:
diff changeset
153 // Don't need to record application end because we currently
a61af66fc99e Initial load
duke
parents:
diff changeset
154 // exit at a safepoint and record_safepoint_begin() handles updating
a61af66fc99e Initial load
duke
parents:
diff changeset
155 // the application time counter at VM exit.
a61af66fc99e Initial load
duke
parents:
diff changeset
156
a61af66fc99e Initial load
duke
parents:
diff changeset
157 jlong RuntimeService::safepoint_sync_time_ms() {
a61af66fc99e Initial load
duke
parents:
diff changeset
158 return UsePerfData ?
a61af66fc99e Initial load
duke
parents:
diff changeset
159 Management::ticks_to_ms(_sync_time_ticks->get_value()) : -1;
a61af66fc99e Initial load
duke
parents:
diff changeset
160 }
a61af66fc99e Initial load
duke
parents:
diff changeset
161
a61af66fc99e Initial load
duke
parents:
diff changeset
162 jlong RuntimeService::safepoint_count() {
a61af66fc99e Initial load
duke
parents:
diff changeset
163 return UsePerfData ?
a61af66fc99e Initial load
duke
parents:
diff changeset
164 _total_safepoints->get_value() : -1;
a61af66fc99e Initial load
duke
parents:
diff changeset
165 }
a61af66fc99e Initial load
duke
parents:
diff changeset
166 jlong RuntimeService::safepoint_time_ms() {
a61af66fc99e Initial load
duke
parents:
diff changeset
167 return UsePerfData ?
a61af66fc99e Initial load
duke
parents:
diff changeset
168 Management::ticks_to_ms(_safepoint_time_ticks->get_value()) : -1;
a61af66fc99e Initial load
duke
parents:
diff changeset
169 }
a61af66fc99e Initial load
duke
parents:
diff changeset
170
a61af66fc99e Initial load
duke
parents:
diff changeset
171 jlong RuntimeService::application_time_ms() {
a61af66fc99e Initial load
duke
parents:
diff changeset
172 return UsePerfData ?
a61af66fc99e Initial load
duke
parents:
diff changeset
173 Management::ticks_to_ms(_application_time_ticks->get_value()) : -1;
a61af66fc99e Initial load
duke
parents:
diff changeset
174 }
a61af66fc99e Initial load
duke
parents:
diff changeset
175
a61af66fc99e Initial load
duke
parents:
diff changeset
176 void RuntimeService::record_interrupted_before_count() {
a61af66fc99e Initial load
duke
parents:
diff changeset
177 if (UsePerfData) {
a61af66fc99e Initial load
duke
parents:
diff changeset
178 _interrupted_before_count->inc();
a61af66fc99e Initial load
duke
parents:
diff changeset
179 }
a61af66fc99e Initial load
duke
parents:
diff changeset
180 }
a61af66fc99e Initial load
duke
parents:
diff changeset
181
a61af66fc99e Initial load
duke
parents:
diff changeset
182 void RuntimeService::record_interrupted_during_count() {
a61af66fc99e Initial load
duke
parents:
diff changeset
183 if (UsePerfData) {
a61af66fc99e Initial load
duke
parents:
diff changeset
184 _interrupted_during_count->inc();
a61af66fc99e Initial load
duke
parents:
diff changeset
185 }
a61af66fc99e Initial load
duke
parents:
diff changeset
186 }
a61af66fc99e Initial load
duke
parents:
diff changeset
187
a61af66fc99e Initial load
duke
parents:
diff changeset
188 void RuntimeService::record_thread_interrupt_signaled_count() {
a61af66fc99e Initial load
duke
parents:
diff changeset
189 if (UsePerfData) {
a61af66fc99e Initial load
duke
parents:
diff changeset
190 _thread_interrupt_signaled_count->inc();
a61af66fc99e Initial load
duke
parents:
diff changeset
191 }
a61af66fc99e Initial load
duke
parents:
diff changeset
192 }