annotate src/share/vm/services/nmtDCmd.cpp @ 10185:d50cc62e94ff

8012715: G1: GraphKit accesses PtrQueue::_index as int but is size_t Summary: In graphKit INT operations were generated to access PtrQueue::_index which has type size_t. This is 64 bit on 64-bit machines. No problems occur on little endian machines as long as the index fits into 32 bit, but on big endian machines the upper part is read, which is zero. This leads to unnecessary branches to the slow path in the runtime. Reviewed-by: twisti, johnc Contributed-by: Martin Doerr <martin.doerr@sap.com>
author johnc
date Wed, 24 Apr 2013 14:48:43 -0700
parents 06db4c0afbf3
children 31a4e55f8c9d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
1 /*
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
4 *
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
7 * published by the Free Software Foundation.
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
8 *
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
13 * accompanied this code).
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
14 *
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
18 *
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
21 * questions.
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
22 *
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
23 */
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
24 #include "precompiled.hpp"
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
25 #include "services/nmtDCmd.hpp"
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
26 #include "services/memReporter.hpp"
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
27 #include "services/memTracker.hpp"
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
28 #include "utilities/globalDefinitions.hpp"
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
29
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
30 NMTDCmd::NMTDCmd(outputStream* output,
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
31 bool heap): DCmdWithParser(output, heap),
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
32 _summary("summary", "request runtime to report current memory summary, " \
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
33 "which includes total reserved and committed memory, along " \
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
34 "with memory usage summary by each subsytem.",
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
35 "BOOLEAN", false, "false"),
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
36 _detail("detail", "request runtime to report memory allocation >= "
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
37 "1K by each callsite.",
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
38 "BOOLEAN", false, "false"),
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
39 _baseline("baseline", "request runtime to baseline current memory usage, " \
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
40 "so it can be compared against in later time.",
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
41 "BOOLEAN", false, "false"),
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
42 _summary_diff("summary.diff", "request runtime to report memory summary " \
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
43 "comparison against previous baseline.",
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
44 "BOOLEAN", false, "false"),
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
45 _detail_diff("detail.diff", "request runtime to report memory detail " \
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
46 "comparison against previous baseline, which shows the memory " \
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
47 "allocation activities at different callsites.",
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
48 "BOOLEAN", false, "false"),
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
49 _shutdown("shutdown", "request runtime to shutdown itself and free the " \
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
50 "memory used by runtime.",
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
51 "BOOLEAN", false, "false"),
8810
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
52 _auto_shutdown("autoShutdown", "automatically shutdown itself under " \
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
53 "stress situation",
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
54 "BOOLEAN", true, "true"),
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
55 #ifndef PRODUCT
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
56 _debug("debug", "print tracker statistics. Debug only, not thread safe", \
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
57 "BOOLEAN", false, "false"),
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
58 #endif
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
59 _scale("scale", "Memory usage in which scale, KB, MB or GB",
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
60 "STRING", false, "KB") {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
61 _dcmdparser.add_dcmd_option(&_summary);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
62 _dcmdparser.add_dcmd_option(&_detail);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
63 _dcmdparser.add_dcmd_option(&_baseline);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
64 _dcmdparser.add_dcmd_option(&_summary_diff);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
65 _dcmdparser.add_dcmd_option(&_detail_diff);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
66 _dcmdparser.add_dcmd_option(&_shutdown);
8810
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
67 _dcmdparser.add_dcmd_option(&_auto_shutdown);
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
68 #ifndef PRODUCT
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
69 _dcmdparser.add_dcmd_option(&_debug);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
70 #endif
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
71 _dcmdparser.add_dcmd_option(&_scale);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
72 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
73
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
74 void NMTDCmd::execute(TRAPS) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
75 const char* scale_value = _scale.value();
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
76 size_t scale_unit;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
77 if (strcmp(scale_value, "KB") == 0 || strcmp(scale_value, "kb") == 0) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
78 scale_unit = K;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
79 } else if (strcmp(scale_value, "MB") == 0 ||
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
80 strcmp(scale_value, "mb") == 0) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
81 scale_unit = M;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
82 } else if (strcmp(scale_value, "GB") == 0 ||
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
83 strcmp(scale_value, "gb") == 0) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
84 scale_unit = G;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
85 } else {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
86 output()->print_cr("Incorrect scale value: %s", scale_value);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
87 return;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
88 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
89
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
90 int nopt = 0;
8810
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
91 if (_summary.is_set() && _summary.value()) { ++nopt; }
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
92 if (_detail.is_set() && _detail.value()) { ++nopt; }
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
93 if (_baseline.is_set() && _baseline.value()) { ++nopt; }
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
94 if (_summary_diff.is_set() && _summary_diff.value()) { ++nopt; }
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
95 if (_detail_diff.is_set() && _detail_diff.value()) { ++nopt; }
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
96 if (_shutdown.is_set() && _shutdown.value()) { ++nopt; }
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
97 if (_auto_shutdown.is_set()) { ++nopt; }
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
98
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
99 #ifndef PRODUCT
8810
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
100 if (_debug.is_set() && _debug.value()) { ++nopt; }
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
101 #endif
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
102
8810
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
103 if (nopt > 1) {
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
104 output()->print_cr("At most one of the following option can be specified: " \
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
105 "summary, detail, baseline, summary.diff, detail.diff, shutdown"
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
106 #ifndef PRODUCT
7412
3f84e17b6bca 8004802: jcmd VM.native_memory baseline=false crashes VM
zgu
parents: 6197
diff changeset
107 ", debug"
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
108 #endif
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
109 );
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
110 return;
7412
3f84e17b6bca 8004802: jcmd VM.native_memory baseline=false crashes VM
zgu
parents: 6197
diff changeset
111 } else if (nopt == 0) {
3f84e17b6bca 8004802: jcmd VM.native_memory baseline=false crashes VM
zgu
parents: 6197
diff changeset
112 if (_summary.is_set()) {
3f84e17b6bca 8004802: jcmd VM.native_memory baseline=false crashes VM
zgu
parents: 6197
diff changeset
113 output()->print_cr("No command to execute");
3f84e17b6bca 8004802: jcmd VM.native_memory baseline=false crashes VM
zgu
parents: 6197
diff changeset
114 return;
3f84e17b6bca 8004802: jcmd VM.native_memory baseline=false crashes VM
zgu
parents: 6197
diff changeset
115 } else {
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
116 _summary.set_value(true);
7412
3f84e17b6bca 8004802: jcmd VM.native_memory baseline=false crashes VM
zgu
parents: 6197
diff changeset
117 }
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
118 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
119
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
120 #ifndef PRODUCT
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
121 if (_debug.value()) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
122 output()->print_cr("debug command is NOT thread-safe, may cause crash");
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
123 MemTracker::print_tracker_stats(output());
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
124 return;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
125 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
126 #endif
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
127
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
128 // native memory tracking has to be on
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
129 if (!MemTracker::is_on() || MemTracker::shutdown_in_progress()) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
130 // if it is not on, what's the reason?
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
131 output()->print_cr(MemTracker::reason());
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
132 return;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
133 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
134
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
135 if (_summary.value()) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
136 BaselineTTYOutputer outputer(output());
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
137 MemTracker::print_memory_usage(outputer, scale_unit, true);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
138 } else if (_detail.value()) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
139 BaselineTTYOutputer outputer(output());
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
140 MemTracker::print_memory_usage(outputer, scale_unit, false);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
141 } else if (_baseline.value()) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
142 if (MemTracker::baseline()) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
143 output()->print_cr("Successfully baselined.");
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
144 } else {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
145 output()->print_cr("Baseline failed.");
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
146 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
147 } else if (_summary_diff.value()) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
148 if (MemTracker::has_baseline()) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
149 BaselineTTYOutputer outputer(output());
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
150 MemTracker::compare_memory_usage(outputer, scale_unit, true);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
151 } else {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
152 output()->print_cr("No baseline to compare, run 'baseline' command first");
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
153 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
154 } else if (_detail_diff.value()) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
155 if (MemTracker::has_baseline()) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
156 BaselineTTYOutputer outputer(output());
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
157 MemTracker::compare_memory_usage(outputer, scale_unit, false);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
158 } else {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
159 output()->print_cr("No baseline to compare to, run 'baseline' command first");
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
160 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
161 } else if (_shutdown.value()) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
162 MemTracker::shutdown(MemTracker::NMT_shutdown_user);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
163 output()->print_cr("Shutdown is in progress, it will take a few moments to " \
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
164 "completely shutdown");
8810
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
165 } else if (_auto_shutdown.is_set()) {
06db4c0afbf3 8009298: NMT: Special version of class loading/unloading with runThese stresses out NMT
zgu
parents: 7412
diff changeset
166 MemTracker::set_autoShutdown(_auto_shutdown.value());
6197
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
167 } else {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
168 ShouldNotReachHere();
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
169 output()->print_cr("Unknown command");
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
170 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
171 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
172
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
173 int NMTDCmd::num_arguments() {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
174 ResourceMark rm;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
175 NMTDCmd* dcmd = new NMTDCmd(NULL, false);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
176 if (dcmd != NULL) {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
177 DCmdMark mark(dcmd);
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
178 return dcmd->_dcmdparser.num_arguments();
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
179 } else {
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
180 return 0;
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
181 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
182 }
d2a62e0f25eb 6995781: Native Memory Tracking (Phase 1)
zgu
parents:
diff changeset
183