annotate src/share/vm/prims/jvmtiManageCapabilities.cpp @ 20543:e7d0505c8a30

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
author tschatzl
date Fri, 10 Oct 2014 15:51:58 +0200
parents abe03600372a
children 4ca6dc0799b6
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: 1397
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: 1397
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1397
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: 1397
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
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
25 #include "precompiled.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
26 #include "jvmtifiles/jvmtiEnv.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
27 #include "prims/jvmtiExport.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
28 #include "prims/jvmtiManageCapabilities.hpp"
0
a61af66fc99e Initial load
duke
parents:
diff changeset
29 static const jint CAPA_SIZE = (JVMTI_INTERNAL_CAPABILITY_COUNT + 7) / 8;
a61af66fc99e Initial load
duke
parents:
diff changeset
30
a61af66fc99e Initial load
duke
parents:
diff changeset
31 // capabilities which are always potentially available
a61af66fc99e Initial load
duke
parents:
diff changeset
32 jvmtiCapabilities JvmtiManageCapabilities::always_capabilities;
a61af66fc99e Initial load
duke
parents:
diff changeset
33
a61af66fc99e Initial load
duke
parents:
diff changeset
34 // capabilities which are potentially available during OnLoad
a61af66fc99e Initial load
duke
parents:
diff changeset
35 jvmtiCapabilities JvmtiManageCapabilities::onload_capabilities;
a61af66fc99e Initial load
duke
parents:
diff changeset
36
a61af66fc99e Initial load
duke
parents:
diff changeset
37 // capabilities which are always potentially available
a61af66fc99e Initial load
duke
parents:
diff changeset
38 // but to only one environment
a61af66fc99e Initial load
duke
parents:
diff changeset
39 jvmtiCapabilities JvmtiManageCapabilities::always_solo_capabilities;
a61af66fc99e Initial load
duke
parents:
diff changeset
40
a61af66fc99e Initial load
duke
parents:
diff changeset
41 // capabilities which are potentially available during OnLoad
a61af66fc99e Initial load
duke
parents:
diff changeset
42 // but to only one environment
a61af66fc99e Initial load
duke
parents:
diff changeset
43 jvmtiCapabilities JvmtiManageCapabilities::onload_solo_capabilities;
a61af66fc99e Initial load
duke
parents:
diff changeset
44
a61af66fc99e Initial load
duke
parents:
diff changeset
45 // remaining capabilities which are always potentially available
a61af66fc99e Initial load
duke
parents:
diff changeset
46 // but to only one environment
a61af66fc99e Initial load
duke
parents:
diff changeset
47 jvmtiCapabilities JvmtiManageCapabilities::always_solo_remaining_capabilities;
a61af66fc99e Initial load
duke
parents:
diff changeset
48
a61af66fc99e Initial load
duke
parents:
diff changeset
49 // remaining capabilities which are potentially available during OnLoad
a61af66fc99e Initial load
duke
parents:
diff changeset
50 // but to only one environment
a61af66fc99e Initial load
duke
parents:
diff changeset
51 jvmtiCapabilities JvmtiManageCapabilities::onload_solo_remaining_capabilities;
a61af66fc99e Initial load
duke
parents:
diff changeset
52
a61af66fc99e Initial load
duke
parents:
diff changeset
53 // all capabilities ever acquired
a61af66fc99e Initial load
duke
parents:
diff changeset
54 jvmtiCapabilities JvmtiManageCapabilities::acquired_capabilities;
a61af66fc99e Initial load
duke
parents:
diff changeset
55
a61af66fc99e Initial load
duke
parents:
diff changeset
56 void JvmtiManageCapabilities::initialize() {
a61af66fc99e Initial load
duke
parents:
diff changeset
57 always_capabilities = init_always_capabilities();
a61af66fc99e Initial load
duke
parents:
diff changeset
58 if (JvmtiEnv::get_phase() != JVMTI_PHASE_ONLOAD) {
a61af66fc99e Initial load
duke
parents:
diff changeset
59 recompute_always_capabilities();
a61af66fc99e Initial load
duke
parents:
diff changeset
60 }
a61af66fc99e Initial load
duke
parents:
diff changeset
61 onload_capabilities = init_onload_capabilities();
a61af66fc99e Initial load
duke
parents:
diff changeset
62 always_solo_capabilities = init_always_solo_capabilities();
a61af66fc99e Initial load
duke
parents:
diff changeset
63 onload_solo_capabilities = init_onload_solo_capabilities();
a61af66fc99e Initial load
duke
parents:
diff changeset
64 always_solo_remaining_capabilities = init_always_solo_capabilities();
a61af66fc99e Initial load
duke
parents:
diff changeset
65 onload_solo_remaining_capabilities = init_onload_solo_capabilities();
a61af66fc99e Initial load
duke
parents:
diff changeset
66 memset(&acquired_capabilities, 0, sizeof(acquired_capabilities));
a61af66fc99e Initial load
duke
parents:
diff changeset
67 }
a61af66fc99e Initial load
duke
parents:
diff changeset
68
a61af66fc99e Initial load
duke
parents:
diff changeset
69 // if the capability sets are initialized in the onload phase then
a61af66fc99e Initial load
duke
parents:
diff changeset
70 // it happens before class data sharing (CDS) is initialized. If it
a61af66fc99e Initial load
duke
parents:
diff changeset
71 // turns out that CDS gets disabled then we must adjust the always
a61af66fc99e Initial load
duke
parents:
diff changeset
72 // capabilities. To ensure a consistent view of the capabililties
a61af66fc99e Initial load
duke
parents:
diff changeset
73 // anything we add here should already be in the onload set.
a61af66fc99e Initial load
duke
parents:
diff changeset
74 void JvmtiManageCapabilities::recompute_always_capabilities() {
a61af66fc99e Initial load
duke
parents:
diff changeset
75 if (!UseSharedSpaces) {
a61af66fc99e Initial load
duke
parents:
diff changeset
76 jvmtiCapabilities jc = always_capabilities;
a61af66fc99e Initial load
duke
parents:
diff changeset
77 jc.can_generate_all_class_hook_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
78 always_capabilities = jc;
a61af66fc99e Initial load
duke
parents:
diff changeset
79 }
a61af66fc99e Initial load
duke
parents:
diff changeset
80 }
a61af66fc99e Initial load
duke
parents:
diff changeset
81
a61af66fc99e Initial load
duke
parents:
diff changeset
82
a61af66fc99e Initial load
duke
parents:
diff changeset
83 // corresponding init functions
a61af66fc99e Initial load
duke
parents:
diff changeset
84 jvmtiCapabilities JvmtiManageCapabilities::init_always_capabilities() {
a61af66fc99e Initial load
duke
parents:
diff changeset
85 jvmtiCapabilities jc;
a61af66fc99e Initial load
duke
parents:
diff changeset
86
a61af66fc99e Initial load
duke
parents:
diff changeset
87 memset(&jc, 0, sizeof(jc));
a61af66fc99e Initial load
duke
parents:
diff changeset
88 jc.can_get_bytecodes = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
89 jc.can_signal_thread = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
90 jc.can_get_source_file_name = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
91 jc.can_get_line_numbers = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
92 jc.can_get_synthetic_attribute = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
93 jc.can_get_monitor_info = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
94 jc.can_get_constant_pool = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
95 jc.can_generate_monitor_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
96 jc.can_generate_garbage_collection_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
97 jc.can_generate_compiled_method_load_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
98 jc.can_generate_native_method_bind_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
99 jc.can_generate_vm_object_alloc_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
100 if (os::is_thread_cpu_time_supported()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
101 jc.can_get_current_thread_cpu_time = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
102 jc.can_get_thread_cpu_time = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
103 }
a61af66fc99e Initial load
duke
parents:
diff changeset
104 jc.can_redefine_classes = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
105 jc.can_redefine_any_class = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
106 jc.can_retransform_classes = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
107 jc.can_retransform_any_class = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
108 jc.can_set_native_method_prefix = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
109 jc.can_tag_objects = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
110 jc.can_generate_object_free_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
111 jc.can_generate_resource_exhaustion_heap_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
112 jc.can_generate_resource_exhaustion_threads_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
113 return jc;
a61af66fc99e Initial load
duke
parents:
diff changeset
114 }
a61af66fc99e Initial load
duke
parents:
diff changeset
115
a61af66fc99e Initial load
duke
parents:
diff changeset
116 jvmtiCapabilities JvmtiManageCapabilities::init_onload_capabilities() {
a61af66fc99e Initial load
duke
parents:
diff changeset
117 jvmtiCapabilities jc;
a61af66fc99e Initial load
duke
parents:
diff changeset
118
a61af66fc99e Initial load
duke
parents:
diff changeset
119 memset(&jc, 0, sizeof(jc));
14420
abe03600372a 8024468: PPC64 (part 201): cppInterpreter: implement bytecode profiling
goetz
parents: 2442
diff changeset
120 #ifndef ZERO
0
a61af66fc99e Initial load
duke
parents:
diff changeset
121 jc.can_pop_frame = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
122 jc.can_force_early_return = 1;
14420
abe03600372a 8024468: PPC64 (part 201): cppInterpreter: implement bytecode profiling
goetz
parents: 2442
diff changeset
123 #endif // !ZERO
0
a61af66fc99e Initial load
duke
parents:
diff changeset
124 jc.can_get_source_debug_extension = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
125 jc.can_access_local_variables = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
126 jc.can_maintain_original_method_order = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
127 jc.can_generate_all_class_hook_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
128 jc.can_generate_single_step_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
129 jc.can_generate_exception_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
130 jc.can_generate_frame_pop_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
131 jc.can_generate_method_entry_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
132 jc.can_generate_method_exit_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
133 jc.can_get_owned_monitor_info = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
134 jc.can_get_owned_monitor_stack_depth_info = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
135 jc.can_get_current_contended_monitor = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
136 // jc.can_get_monitor_info = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
137 jc.can_tag_objects = 1; // TODO: this should have been removed
a61af66fc99e Initial load
duke
parents:
diff changeset
138 jc.can_generate_object_free_events = 1; // TODO: this should have been removed
a61af66fc99e Initial load
duke
parents:
diff changeset
139 return jc;
a61af66fc99e Initial load
duke
parents:
diff changeset
140 }
a61af66fc99e Initial load
duke
parents:
diff changeset
141
a61af66fc99e Initial load
duke
parents:
diff changeset
142
a61af66fc99e Initial load
duke
parents:
diff changeset
143 jvmtiCapabilities JvmtiManageCapabilities::init_always_solo_capabilities() {
a61af66fc99e Initial load
duke
parents:
diff changeset
144 jvmtiCapabilities jc;
a61af66fc99e Initial load
duke
parents:
diff changeset
145
a61af66fc99e Initial load
duke
parents:
diff changeset
146 memset(&jc, 0, sizeof(jc));
a61af66fc99e Initial load
duke
parents:
diff changeset
147 jc.can_suspend = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
148 return jc;
a61af66fc99e Initial load
duke
parents:
diff changeset
149 }
a61af66fc99e Initial load
duke
parents:
diff changeset
150
a61af66fc99e Initial load
duke
parents:
diff changeset
151
a61af66fc99e Initial load
duke
parents:
diff changeset
152 jvmtiCapabilities JvmtiManageCapabilities::init_onload_solo_capabilities() {
a61af66fc99e Initial load
duke
parents:
diff changeset
153 jvmtiCapabilities jc;
a61af66fc99e Initial load
duke
parents:
diff changeset
154
a61af66fc99e Initial load
duke
parents:
diff changeset
155 memset(&jc, 0, sizeof(jc));
a61af66fc99e Initial load
duke
parents:
diff changeset
156 jc.can_generate_field_modification_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
157 jc.can_generate_field_access_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
158 jc.can_generate_breakpoint_events = 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
159 return jc;
a61af66fc99e Initial load
duke
parents:
diff changeset
160 }
a61af66fc99e Initial load
duke
parents:
diff changeset
161
a61af66fc99e Initial load
duke
parents:
diff changeset
162
a61af66fc99e Initial load
duke
parents:
diff changeset
163 jvmtiCapabilities *JvmtiManageCapabilities::either(const jvmtiCapabilities *a, const jvmtiCapabilities *b,
a61af66fc99e Initial load
duke
parents:
diff changeset
164 jvmtiCapabilities *result) {
a61af66fc99e Initial load
duke
parents:
diff changeset
165 char *ap = (char *)a;
a61af66fc99e Initial load
duke
parents:
diff changeset
166 char *bp = (char *)b;
a61af66fc99e Initial load
duke
parents:
diff changeset
167 char *resultp = (char *)result;
a61af66fc99e Initial load
duke
parents:
diff changeset
168
a61af66fc99e Initial load
duke
parents:
diff changeset
169 for (int i = 0; i < CAPA_SIZE; ++i) {
a61af66fc99e Initial load
duke
parents:
diff changeset
170 *resultp++ = *ap++ | *bp++;
a61af66fc99e Initial load
duke
parents:
diff changeset
171 }
a61af66fc99e Initial load
duke
parents:
diff changeset
172
a61af66fc99e Initial load
duke
parents:
diff changeset
173 return result;
a61af66fc99e Initial load
duke
parents:
diff changeset
174 }
a61af66fc99e Initial load
duke
parents:
diff changeset
175
a61af66fc99e Initial load
duke
parents:
diff changeset
176
a61af66fc99e Initial load
duke
parents:
diff changeset
177 jvmtiCapabilities *JvmtiManageCapabilities::both(const jvmtiCapabilities *a, const jvmtiCapabilities *b,
a61af66fc99e Initial load
duke
parents:
diff changeset
178 jvmtiCapabilities *result) {
a61af66fc99e Initial load
duke
parents:
diff changeset
179 char *ap = (char *)a;
a61af66fc99e Initial load
duke
parents:
diff changeset
180 char *bp = (char *)b;
a61af66fc99e Initial load
duke
parents:
diff changeset
181 char *resultp = (char *)result;
a61af66fc99e Initial load
duke
parents:
diff changeset
182
a61af66fc99e Initial load
duke
parents:
diff changeset
183 for (int i = 0; i < CAPA_SIZE; ++i) {
a61af66fc99e Initial load
duke
parents:
diff changeset
184 *resultp++ = *ap++ & *bp++;
a61af66fc99e Initial load
duke
parents:
diff changeset
185 }
a61af66fc99e Initial load
duke
parents:
diff changeset
186
a61af66fc99e Initial load
duke
parents:
diff changeset
187 return result;
a61af66fc99e Initial load
duke
parents:
diff changeset
188 }
a61af66fc99e Initial load
duke
parents:
diff changeset
189
a61af66fc99e Initial load
duke
parents:
diff changeset
190
a61af66fc99e Initial load
duke
parents:
diff changeset
191 jvmtiCapabilities *JvmtiManageCapabilities::exclude(const jvmtiCapabilities *a, const jvmtiCapabilities *b,
a61af66fc99e Initial load
duke
parents:
diff changeset
192 jvmtiCapabilities *result) {
a61af66fc99e Initial load
duke
parents:
diff changeset
193 char *ap = (char *)a;
a61af66fc99e Initial load
duke
parents:
diff changeset
194 char *bp = (char *)b;
a61af66fc99e Initial load
duke
parents:
diff changeset
195 char *resultp = (char *)result;
a61af66fc99e Initial load
duke
parents:
diff changeset
196
a61af66fc99e Initial load
duke
parents:
diff changeset
197 for (int i = 0; i < CAPA_SIZE; ++i) {
a61af66fc99e Initial load
duke
parents:
diff changeset
198 *resultp++ = *ap++ & ~*bp++;
a61af66fc99e Initial load
duke
parents:
diff changeset
199 }
a61af66fc99e Initial load
duke
parents:
diff changeset
200
a61af66fc99e Initial load
duke
parents:
diff changeset
201 return result;
a61af66fc99e Initial load
duke
parents:
diff changeset
202 }
a61af66fc99e Initial load
duke
parents:
diff changeset
203
a61af66fc99e Initial load
duke
parents:
diff changeset
204
a61af66fc99e Initial load
duke
parents:
diff changeset
205 bool JvmtiManageCapabilities::has_some(const jvmtiCapabilities *a) {
a61af66fc99e Initial load
duke
parents:
diff changeset
206 char *ap = (char *)a;
a61af66fc99e Initial load
duke
parents:
diff changeset
207
a61af66fc99e Initial load
duke
parents:
diff changeset
208 for (int i = 0; i < CAPA_SIZE; ++i) {
a61af66fc99e Initial load
duke
parents:
diff changeset
209 if (*ap++ != 0) {
a61af66fc99e Initial load
duke
parents:
diff changeset
210 return true;
a61af66fc99e Initial load
duke
parents:
diff changeset
211 }
a61af66fc99e Initial load
duke
parents:
diff changeset
212 }
a61af66fc99e Initial load
duke
parents:
diff changeset
213
a61af66fc99e Initial load
duke
parents:
diff changeset
214 return false;
a61af66fc99e Initial load
duke
parents:
diff changeset
215 }
a61af66fc99e Initial load
duke
parents:
diff changeset
216
a61af66fc99e Initial load
duke
parents:
diff changeset
217
a61af66fc99e Initial load
duke
parents:
diff changeset
218 void JvmtiManageCapabilities::copy_capabilities(const jvmtiCapabilities *from, jvmtiCapabilities *to) {
a61af66fc99e Initial load
duke
parents:
diff changeset
219 char *ap = (char *)from;
a61af66fc99e Initial load
duke
parents:
diff changeset
220 char *resultp = (char *)to;
a61af66fc99e Initial load
duke
parents:
diff changeset
221
a61af66fc99e Initial load
duke
parents:
diff changeset
222 for (int i = 0; i < CAPA_SIZE; ++i) {
a61af66fc99e Initial load
duke
parents:
diff changeset
223 *resultp++ = *ap++;
a61af66fc99e Initial load
duke
parents:
diff changeset
224 }
a61af66fc99e Initial load
duke
parents:
diff changeset
225 }
a61af66fc99e Initial load
duke
parents:
diff changeset
226
a61af66fc99e Initial load
duke
parents:
diff changeset
227
a61af66fc99e Initial load
duke
parents:
diff changeset
228 void JvmtiManageCapabilities::get_potential_capabilities(const jvmtiCapabilities *current,
a61af66fc99e Initial load
duke
parents:
diff changeset
229 const jvmtiCapabilities *prohibited,
a61af66fc99e Initial load
duke
parents:
diff changeset
230 jvmtiCapabilities *result) {
a61af66fc99e Initial load
duke
parents:
diff changeset
231 // exclude prohibited capabilities, must be before adding current
a61af66fc99e Initial load
duke
parents:
diff changeset
232 exclude(&always_capabilities, prohibited, result);
a61af66fc99e Initial load
duke
parents:
diff changeset
233
a61af66fc99e Initial load
duke
parents:
diff changeset
234 // must include current since it may possess solo capabilities and now prohibited
a61af66fc99e Initial load
duke
parents:
diff changeset
235 either(result, current, result);
a61af66fc99e Initial load
duke
parents:
diff changeset
236
a61af66fc99e Initial load
duke
parents:
diff changeset
237 // add other remaining
a61af66fc99e Initial load
duke
parents:
diff changeset
238 either(result, &always_solo_remaining_capabilities, result);
a61af66fc99e Initial load
duke
parents:
diff changeset
239
a61af66fc99e Initial load
duke
parents:
diff changeset
240 // if this is during OnLoad more capabilities are available
a61af66fc99e Initial load
duke
parents:
diff changeset
241 if (JvmtiEnv::get_phase() == JVMTI_PHASE_ONLOAD) {
a61af66fc99e Initial load
duke
parents:
diff changeset
242 either(result, &onload_capabilities, result);
a61af66fc99e Initial load
duke
parents:
diff changeset
243 either(result, &onload_solo_remaining_capabilities, result);
a61af66fc99e Initial load
duke
parents:
diff changeset
244 }
a61af66fc99e Initial load
duke
parents:
diff changeset
245 }
a61af66fc99e Initial load
duke
parents:
diff changeset
246
a61af66fc99e Initial load
duke
parents:
diff changeset
247 jvmtiError JvmtiManageCapabilities::add_capabilities(const jvmtiCapabilities *current,
a61af66fc99e Initial load
duke
parents:
diff changeset
248 const jvmtiCapabilities *prohibited,
a61af66fc99e Initial load
duke
parents:
diff changeset
249 const jvmtiCapabilities *desired,
a61af66fc99e Initial load
duke
parents:
diff changeset
250 jvmtiCapabilities *result) {
a61af66fc99e Initial load
duke
parents:
diff changeset
251 // check that the capabilities being added are potential capabilities
a61af66fc99e Initial load
duke
parents:
diff changeset
252 jvmtiCapabilities temp;
a61af66fc99e Initial load
duke
parents:
diff changeset
253 get_potential_capabilities(current, prohibited, &temp);
a61af66fc99e Initial load
duke
parents:
diff changeset
254 if (has_some(exclude(desired, &temp, &temp))) {
a61af66fc99e Initial load
duke
parents:
diff changeset
255 return JVMTI_ERROR_NOT_AVAILABLE;
a61af66fc99e Initial load
duke
parents:
diff changeset
256 }
a61af66fc99e Initial load
duke
parents:
diff changeset
257
a61af66fc99e Initial load
duke
parents:
diff changeset
258 // add to the set of ever acquired capabilities
a61af66fc99e Initial load
duke
parents:
diff changeset
259 either(&acquired_capabilities, desired, &acquired_capabilities);
a61af66fc99e Initial load
duke
parents:
diff changeset
260
a61af66fc99e Initial load
duke
parents:
diff changeset
261 // onload capabilities that got added are now permanent - so, also remove from onload
a61af66fc99e Initial load
duke
parents:
diff changeset
262 both(&onload_capabilities, desired, &temp);
a61af66fc99e Initial load
duke
parents:
diff changeset
263 either(&always_capabilities, &temp, &always_capabilities);
a61af66fc99e Initial load
duke
parents:
diff changeset
264 exclude(&onload_capabilities, &temp, &onload_capabilities);
a61af66fc99e Initial load
duke
parents:
diff changeset
265
a61af66fc99e Initial load
duke
parents:
diff changeset
266 // same for solo capabilities (transferred capabilities in the remaining sets handled as part of standard grab - below)
a61af66fc99e Initial load
duke
parents:
diff changeset
267 both(&onload_solo_capabilities, desired, &temp);
a61af66fc99e Initial load
duke
parents:
diff changeset
268 either(&always_solo_capabilities, &temp, &always_solo_capabilities);
a61af66fc99e Initial load
duke
parents:
diff changeset
269 exclude(&onload_solo_capabilities, &temp, &onload_solo_capabilities);
a61af66fc99e Initial load
duke
parents:
diff changeset
270
a61af66fc99e Initial load
duke
parents:
diff changeset
271 // remove solo capabilities that are now taken
a61af66fc99e Initial load
duke
parents:
diff changeset
272 exclude(&always_solo_remaining_capabilities, desired, &always_solo_remaining_capabilities);
a61af66fc99e Initial load
duke
parents:
diff changeset
273 exclude(&onload_solo_remaining_capabilities, desired, &onload_solo_remaining_capabilities);
a61af66fc99e Initial load
duke
parents:
diff changeset
274
a61af66fc99e Initial load
duke
parents:
diff changeset
275 // return the result
a61af66fc99e Initial load
duke
parents:
diff changeset
276 either(current, desired, result);
a61af66fc99e Initial load
duke
parents:
diff changeset
277
a61af66fc99e Initial load
duke
parents:
diff changeset
278 update();
a61af66fc99e Initial load
duke
parents:
diff changeset
279
a61af66fc99e Initial load
duke
parents:
diff changeset
280 return JVMTI_ERROR_NONE;
a61af66fc99e Initial load
duke
parents:
diff changeset
281 }
a61af66fc99e Initial load
duke
parents:
diff changeset
282
a61af66fc99e Initial load
duke
parents:
diff changeset
283
a61af66fc99e Initial load
duke
parents:
diff changeset
284 void JvmtiManageCapabilities::relinquish_capabilities(const jvmtiCapabilities *current,
a61af66fc99e Initial load
duke
parents:
diff changeset
285 const jvmtiCapabilities *unwanted,
a61af66fc99e Initial load
duke
parents:
diff changeset
286 jvmtiCapabilities *result) {
a61af66fc99e Initial load
duke
parents:
diff changeset
287 jvmtiCapabilities to_trash;
a61af66fc99e Initial load
duke
parents:
diff changeset
288 jvmtiCapabilities temp;
a61af66fc99e Initial load
duke
parents:
diff changeset
289
a61af66fc99e Initial load
duke
parents:
diff changeset
290 // can't give up what you don't have
a61af66fc99e Initial load
duke
parents:
diff changeset
291 both(current, unwanted, &to_trash);
a61af66fc99e Initial load
duke
parents:
diff changeset
292
a61af66fc99e Initial load
duke
parents:
diff changeset
293 // restore solo capabilities but only those that belong
a61af66fc99e Initial load
duke
parents:
diff changeset
294 either(&always_solo_remaining_capabilities, both(&always_solo_capabilities, &to_trash, &temp),
a61af66fc99e Initial load
duke
parents:
diff changeset
295 &always_solo_remaining_capabilities);
a61af66fc99e Initial load
duke
parents:
diff changeset
296 either(&onload_solo_remaining_capabilities, both(&onload_solo_capabilities, &to_trash, &temp),
a61af66fc99e Initial load
duke
parents:
diff changeset
297 &onload_solo_remaining_capabilities);
a61af66fc99e Initial load
duke
parents:
diff changeset
298
a61af66fc99e Initial load
duke
parents:
diff changeset
299 update();
a61af66fc99e Initial load
duke
parents:
diff changeset
300
a61af66fc99e Initial load
duke
parents:
diff changeset
301 // return the result
a61af66fc99e Initial load
duke
parents:
diff changeset
302 exclude(current, unwanted, result);
a61af66fc99e Initial load
duke
parents:
diff changeset
303 }
a61af66fc99e Initial load
duke
parents:
diff changeset
304
a61af66fc99e Initial load
duke
parents:
diff changeset
305
a61af66fc99e Initial load
duke
parents:
diff changeset
306 void JvmtiManageCapabilities::update() {
a61af66fc99e Initial load
duke
parents:
diff changeset
307 jvmtiCapabilities avail;
a61af66fc99e Initial load
duke
parents:
diff changeset
308
a61af66fc99e Initial load
duke
parents:
diff changeset
309 // all capabilities
a61af66fc99e Initial load
duke
parents:
diff changeset
310 either(&always_capabilities, &always_solo_capabilities, &avail);
a61af66fc99e Initial load
duke
parents:
diff changeset
311
a61af66fc99e Initial load
duke
parents:
diff changeset
312 bool interp_events =
a61af66fc99e Initial load
duke
parents:
diff changeset
313 avail.can_generate_field_access_events ||
a61af66fc99e Initial load
duke
parents:
diff changeset
314 avail.can_generate_field_modification_events ||
a61af66fc99e Initial load
duke
parents:
diff changeset
315 avail.can_generate_single_step_events ||
a61af66fc99e Initial load
duke
parents:
diff changeset
316 avail.can_generate_frame_pop_events ||
a61af66fc99e Initial load
duke
parents:
diff changeset
317 avail.can_generate_method_entry_events ||
a61af66fc99e Initial load
duke
parents:
diff changeset
318 avail.can_generate_method_exit_events;
a61af66fc99e Initial load
duke
parents:
diff changeset
319 bool enter_all_methods =
a61af66fc99e Initial load
duke
parents:
diff changeset
320 interp_events ||
a61af66fc99e Initial load
duke
parents:
diff changeset
321 avail.can_generate_breakpoint_events;
2442
c2323e2ea62b 6385687: UseFastEmptyMethods/UseFastAccessorMethods considered harmful
never
parents: 1972
diff changeset
322 if (enter_all_methods) {
c2323e2ea62b 6385687: UseFastEmptyMethods/UseFastAccessorMethods considered harmful
never
parents: 1972
diff changeset
323 // Disable these when tracking the bytecodes
c2323e2ea62b 6385687: UseFastEmptyMethods/UseFastAccessorMethods considered harmful
never
parents: 1972
diff changeset
324 UseFastEmptyMethods = false;
c2323e2ea62b 6385687: UseFastEmptyMethods/UseFastAccessorMethods considered harmful
never
parents: 1972
diff changeset
325 UseFastAccessorMethods = false;
c2323e2ea62b 6385687: UseFastEmptyMethods/UseFastAccessorMethods considered harmful
never
parents: 1972
diff changeset
326 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
327
a61af66fc99e Initial load
duke
parents:
diff changeset
328 if (avail.can_generate_breakpoint_events) {
a61af66fc99e Initial load
duke
parents:
diff changeset
329 RewriteFrequentPairs = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
330 }
a61af66fc99e Initial load
duke
parents:
diff changeset
331
a61af66fc99e Initial load
duke
parents:
diff changeset
332 // If can_redefine_classes is enabled in the onload phase then we know that the
a61af66fc99e Initial load
duke
parents:
diff changeset
333 // dependency information recorded by the compiler is complete.
a61af66fc99e Initial load
duke
parents:
diff changeset
334 if ((avail.can_redefine_classes || avail.can_retransform_classes) &&
a61af66fc99e Initial load
duke
parents:
diff changeset
335 JvmtiEnv::get_phase() == JVMTI_PHASE_ONLOAD) {
a61af66fc99e Initial load
duke
parents:
diff changeset
336 JvmtiExport::set_all_dependencies_are_recorded(true);
a61af66fc99e Initial load
duke
parents:
diff changeset
337 }
a61af66fc99e Initial load
duke
parents:
diff changeset
338
a61af66fc99e Initial load
duke
parents:
diff changeset
339 JvmtiExport::set_can_get_source_debug_extension(avail.can_get_source_debug_extension);
a61af66fc99e Initial load
duke
parents:
diff changeset
340 JvmtiExport::set_can_maintain_original_method_order(avail.can_maintain_original_method_order);
a61af66fc99e Initial load
duke
parents:
diff changeset
341 JvmtiExport::set_can_post_interpreter_events(interp_events);
a61af66fc99e Initial load
duke
parents:
diff changeset
342 JvmtiExport::set_can_hotswap_or_post_breakpoint(
a61af66fc99e Initial load
duke
parents:
diff changeset
343 avail.can_generate_breakpoint_events ||
a61af66fc99e Initial load
duke
parents:
diff changeset
344 avail.can_redefine_classes ||
a61af66fc99e Initial load
duke
parents:
diff changeset
345 avail.can_retransform_classes);
a61af66fc99e Initial load
duke
parents:
diff changeset
346 JvmtiExport::set_can_modify_any_class(
a61af66fc99e Initial load
duke
parents:
diff changeset
347 avail.can_generate_breakpoint_events ||
a61af66fc99e Initial load
duke
parents:
diff changeset
348 avail.can_generate_all_class_hook_events);
a61af66fc99e Initial load
duke
parents:
diff changeset
349 JvmtiExport::set_can_walk_any_space(
a61af66fc99e Initial load
duke
parents:
diff changeset
350 avail.can_tag_objects); // disable sharing in onload phase
1397
b4776199210f 6943485: JVMTI always on capabilities change code generation too much
never
parents: 1213
diff changeset
351 // This controls whether the compilers keep extra locals live to
b4776199210f 6943485: JVMTI always on capabilities change code generation too much
never
parents: 1213
diff changeset
352 // improve the debugging experience so only set them if the selected
b4776199210f 6943485: JVMTI always on capabilities change code generation too much
never
parents: 1213
diff changeset
353 // capabilities look like a debugger.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
354 JvmtiExport::set_can_access_local_variables(
1397
b4776199210f 6943485: JVMTI always on capabilities change code generation too much
never
parents: 1213
diff changeset
355 avail.can_access_local_variables ||
b4776199210f 6943485: JVMTI always on capabilities change code generation too much
never
parents: 1213
diff changeset
356 avail.can_generate_breakpoint_events ||
b4776199210f 6943485: JVMTI always on capabilities change code generation too much
never
parents: 1213
diff changeset
357 avail.can_generate_frame_pop_events);
1213
6deeaebad47a 6902182: 4/4 Starting with jdwp agent should not incur performance penalty
dcubed
parents: 1078
diff changeset
358 JvmtiExport::set_can_post_on_exceptions(
0
a61af66fc99e Initial load
duke
parents:
diff changeset
359 avail.can_generate_exception_events ||
a61af66fc99e Initial load
duke
parents:
diff changeset
360 avail.can_generate_frame_pop_events ||
a61af66fc99e Initial load
duke
parents:
diff changeset
361 avail.can_generate_method_exit_events);
a61af66fc99e Initial load
duke
parents:
diff changeset
362 JvmtiExport::set_can_post_breakpoint(avail.can_generate_breakpoint_events);
a61af66fc99e Initial load
duke
parents:
diff changeset
363 JvmtiExport::set_can_post_field_access(avail.can_generate_field_access_events);
a61af66fc99e Initial load
duke
parents:
diff changeset
364 JvmtiExport::set_can_post_field_modification(avail.can_generate_field_modification_events);
a61af66fc99e Initial load
duke
parents:
diff changeset
365 JvmtiExport::set_can_post_method_entry(avail.can_generate_method_entry_events);
a61af66fc99e Initial load
duke
parents:
diff changeset
366 JvmtiExport::set_can_post_method_exit(avail.can_generate_method_exit_events ||
a61af66fc99e Initial load
duke
parents:
diff changeset
367 avail.can_generate_frame_pop_events);
a61af66fc99e Initial load
duke
parents:
diff changeset
368 JvmtiExport::set_can_pop_frame(avail.can_pop_frame);
a61af66fc99e Initial load
duke
parents:
diff changeset
369 JvmtiExport::set_can_force_early_return(avail.can_force_early_return);
a61af66fc99e Initial load
duke
parents:
diff changeset
370 JvmtiExport::set_should_clean_up_heap_objects(avail.can_generate_breakpoint_events);
a61af66fc99e Initial load
duke
parents:
diff changeset
371 }
a61af66fc99e Initial load
duke
parents:
diff changeset
372
a61af66fc99e Initial load
duke
parents:
diff changeset
373 #ifndef PRODUCT
a61af66fc99e Initial load
duke
parents:
diff changeset
374
a61af66fc99e Initial load
duke
parents:
diff changeset
375 void JvmtiManageCapabilities:: print(const jvmtiCapabilities* cap) {
a61af66fc99e Initial load
duke
parents:
diff changeset
376 tty->print_cr("----- capabilities -----");
a61af66fc99e Initial load
duke
parents:
diff changeset
377 if (cap->can_tag_objects)
a61af66fc99e Initial load
duke
parents:
diff changeset
378 tty->print_cr("can_tag_objects");
a61af66fc99e Initial load
duke
parents:
diff changeset
379 if (cap->can_generate_field_modification_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
380 tty->print_cr("can_generate_field_modification_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
381 if (cap->can_generate_field_access_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
382 tty->print_cr("can_generate_field_access_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
383 if (cap->can_get_bytecodes)
a61af66fc99e Initial load
duke
parents:
diff changeset
384 tty->print_cr("can_get_bytecodes");
a61af66fc99e Initial load
duke
parents:
diff changeset
385 if (cap->can_get_synthetic_attribute)
a61af66fc99e Initial load
duke
parents:
diff changeset
386 tty->print_cr("can_get_synthetic_attribute");
a61af66fc99e Initial load
duke
parents:
diff changeset
387 if (cap->can_get_owned_monitor_info)
a61af66fc99e Initial load
duke
parents:
diff changeset
388 tty->print_cr("can_get_owned_monitor_info");
a61af66fc99e Initial load
duke
parents:
diff changeset
389 if (cap->can_get_current_contended_monitor)
a61af66fc99e Initial load
duke
parents:
diff changeset
390 tty->print_cr("can_get_current_contended_monitor");
a61af66fc99e Initial load
duke
parents:
diff changeset
391 if (cap->can_get_monitor_info)
a61af66fc99e Initial load
duke
parents:
diff changeset
392 tty->print_cr("can_get_monitor_info");
a61af66fc99e Initial load
duke
parents:
diff changeset
393 if (cap->can_get_constant_pool)
a61af66fc99e Initial load
duke
parents:
diff changeset
394 tty->print_cr("can_get_constant_pool");
a61af66fc99e Initial load
duke
parents:
diff changeset
395 if (cap->can_pop_frame)
a61af66fc99e Initial load
duke
parents:
diff changeset
396 tty->print_cr("can_pop_frame");
a61af66fc99e Initial load
duke
parents:
diff changeset
397 if (cap->can_force_early_return)
a61af66fc99e Initial load
duke
parents:
diff changeset
398 tty->print_cr("can_force_early_return");
a61af66fc99e Initial load
duke
parents:
diff changeset
399 if (cap->can_redefine_classes)
a61af66fc99e Initial load
duke
parents:
diff changeset
400 tty->print_cr("can_redefine_classes");
a61af66fc99e Initial load
duke
parents:
diff changeset
401 if (cap->can_retransform_classes)
a61af66fc99e Initial load
duke
parents:
diff changeset
402 tty->print_cr("can_retransform_classes");
a61af66fc99e Initial load
duke
parents:
diff changeset
403 if (cap->can_signal_thread)
a61af66fc99e Initial load
duke
parents:
diff changeset
404 tty->print_cr("can_signal_thread");
a61af66fc99e Initial load
duke
parents:
diff changeset
405 if (cap->can_get_source_file_name)
a61af66fc99e Initial load
duke
parents:
diff changeset
406 tty->print_cr("can_get_source_file_name");
a61af66fc99e Initial load
duke
parents:
diff changeset
407 if (cap->can_get_line_numbers)
a61af66fc99e Initial load
duke
parents:
diff changeset
408 tty->print_cr("can_get_line_numbers");
a61af66fc99e Initial load
duke
parents:
diff changeset
409 if (cap->can_get_source_debug_extension)
a61af66fc99e Initial load
duke
parents:
diff changeset
410 tty->print_cr("can_get_source_debug_extension");
a61af66fc99e Initial load
duke
parents:
diff changeset
411 if (cap->can_access_local_variables)
a61af66fc99e Initial load
duke
parents:
diff changeset
412 tty->print_cr("can_access_local_variables");
a61af66fc99e Initial load
duke
parents:
diff changeset
413 if (cap->can_maintain_original_method_order)
a61af66fc99e Initial load
duke
parents:
diff changeset
414 tty->print_cr("can_maintain_original_method_order");
a61af66fc99e Initial load
duke
parents:
diff changeset
415 if (cap->can_generate_single_step_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
416 tty->print_cr("can_generate_single_step_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
417 if (cap->can_generate_exception_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
418 tty->print_cr("can_generate_exception_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
419 if (cap->can_generate_frame_pop_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
420 tty->print_cr("can_generate_frame_pop_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
421 if (cap->can_generate_breakpoint_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
422 tty->print_cr("can_generate_breakpoint_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
423 if (cap->can_suspend)
a61af66fc99e Initial load
duke
parents:
diff changeset
424 tty->print_cr("can_suspend");
a61af66fc99e Initial load
duke
parents:
diff changeset
425 if (cap->can_redefine_any_class )
a61af66fc99e Initial load
duke
parents:
diff changeset
426 tty->print_cr("can_redefine_any_class");
a61af66fc99e Initial load
duke
parents:
diff changeset
427 if (cap->can_retransform_any_class )
a61af66fc99e Initial load
duke
parents:
diff changeset
428 tty->print_cr("can_retransform_any_class");
a61af66fc99e Initial load
duke
parents:
diff changeset
429 if (cap->can_get_current_thread_cpu_time)
a61af66fc99e Initial load
duke
parents:
diff changeset
430 tty->print_cr("can_get_current_thread_cpu_time");
a61af66fc99e Initial load
duke
parents:
diff changeset
431 if (cap->can_get_thread_cpu_time)
a61af66fc99e Initial load
duke
parents:
diff changeset
432 tty->print_cr("can_get_thread_cpu_time");
a61af66fc99e Initial load
duke
parents:
diff changeset
433 if (cap->can_generate_method_entry_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
434 tty->print_cr("can_generate_method_entry_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
435 if (cap->can_generate_method_exit_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
436 tty->print_cr("can_generate_method_exit_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
437 if (cap->can_generate_all_class_hook_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
438 tty->print_cr("can_generate_all_class_hook_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
439 if (cap->can_generate_compiled_method_load_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
440 tty->print_cr("can_generate_compiled_method_load_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
441 if (cap->can_generate_monitor_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
442 tty->print_cr("can_generate_monitor_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
443 if (cap->can_generate_vm_object_alloc_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
444 tty->print_cr("can_generate_vm_object_alloc_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
445 if (cap->can_generate_native_method_bind_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
446 tty->print_cr("can_generate_native_method_bind_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
447 if (cap->can_generate_garbage_collection_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
448 tty->print_cr("can_generate_garbage_collection_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
449 if (cap->can_generate_object_free_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
450 tty->print_cr("can_generate_object_free_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
451 if (cap->can_generate_resource_exhaustion_heap_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
452 tty->print_cr("can_generate_resource_exhaustion_heap_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
453 if (cap->can_generate_resource_exhaustion_threads_events)
a61af66fc99e Initial load
duke
parents:
diff changeset
454 tty->print_cr("can_generate_resource_exhaustion_threads_events");
a61af66fc99e Initial load
duke
parents:
diff changeset
455 }
a61af66fc99e Initial load
duke
parents:
diff changeset
456
a61af66fc99e Initial load
duke
parents:
diff changeset
457 #endif