blob: a62610dad66aa1826d535445c26e73c2436800a6 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html>
3<head>
4 <meta content="deepa viswanathan" name="Author">
5 <meta content="Mozilla/4.04 [en] (WinNT; U) [Netscape]"
6 name="GENERATOR">
7 <title>HPROF Agent</title>
8 <meta name="author" content="Kelly O'Hair">
9</head>
10<body alink="#ff0000" bgcolor="#ffffff" link="#0000ee" text="#000000"
11 vlink="#551a8b">
12<h1 style="text-align: center;"><a name="mozTocId137594"
13 class="mozTocH1"></a><span style="font-weight: bold;"></span>HPROF
14Agent<br>
15</h1>
16<h2><a name="mozTocId558923" class="mozTocH2"></a>Contents</h2>
17<span style="text-decoration: underline;"></span>
18<ol id="mozToc">
19<!--mozToc h1 1 h2 2 h3 3 h4 4 h5 5 h6 6--><li><a href="#mozTocId137594">HPROF
20Agent</a>
21 <ol>
22 <li><a href="#mozTocId558923">Contents</a></li>
23 <li><a href="#mozTocId550204">Overview</a></li>
24 <li><a href="#mozTocId634758">Start-up</a></li>
25 <li><a href="#mozTocId708821">Heap Allocation
26Profiles (heap=sites) </a></li>
27 <li><a href="#mozTocId634725">Heap Dump (heap=dump)</a></li>
28 <li><a href="#mozTocId546448">CPU Usage Sampling
29Profiles (cpu=samples) </a></li>
30 <li><a href="#mozTocId116568">CPU Usage Times Profile (cpu=times)
31 </a></li>
32 <li><a href="#mozTocId848088">Binary Dump Format
33(format=b)</a>
34 <ol>
35 <li><a href="#mozTocId348369">Socket Connection and
36Communication</a></li>
37 </ol>
38 <ol>
39 <li><a href="#mozTocId348360">Handling of Arrays</a></li>
40 </ol>
41 </li>
42 <li><a href="#mozTocId589424">Source Code </a></li>
43 </ol>
44 </li>
45</ol>
46<span style="text-decoration: underline;"></span>
47<h2><a name="mozTocId550204" class="mozTocH2"></a>Overview</h2>
48<p>This document describes the JVM TI Agent HPROF delivered in
49the Java Development Kit (JDK). It is intended as demonstration code
50for JVM TI, and as a functional
51replacement for the older HPROF JVMPI Agent delivered in past releases.<br>
52</p>
53Previous 1.4 and earlier releases of the JDK contained an HPROF
54agent built on the experimental JVMPI.&nbsp;
55The newer JVM TI replaces both JVMDI and JVMPI.&nbsp;&nbsp;
56<p><span style="font-weight: bold;">Note</span>: Differences between
57this HPROF implementation and the older JVMPI based HPROF are marked in
58<span style="font-style: italic; color: rgb(255, 0, 0);">RED ITALICS</span>
59throughout this document.<br>
60</p>
61<br>
62<h2><a name="mozTocId634758" class="mozTocH3"></a>Start-up</h2>
63<p>HPROF is a simple profiler agent shipped with the JDK. It is
64a dynamically-linked
65library that interacts with the JVM TI and
66writes out profiling
67information either to a file or to a socket in ascii or binary format.
68This information can
69be further processed by a profiler front-end tool.</p>
70<p>It is capable of presenting CPU usage, heap allocation statistics
71and monitor contention
72profiles. In addition it can also report complete heap dumps and states
73of all the monitors and threads in the Java virtual machine.
74</p>
75<p>HPROF can be invoked by:
76</p>
77<pre>java -<span style="font-weight: bold;">agentlib:</span><b>hprof</b> ToBeProfiledClass</pre>
78Depending on the type of profiling requested, HPROF instructs the
79virtual machine to send it the relevant JVM TI events and processes
80the event data into profiling information. For example, the following
81command obtains the heap allocation profile:
82<pre>java -agentlib:hprof=heap=sites ToBeProfiledClass</pre>
83Following is the complete list of options that can passed to hprof :
84<blockquote>
85 <pre>java -agentlib:hprof=help<br><br> HPROF: Heap and CPU Profiling Agent (JVMTI Demonstration Code)<br><br>hprof usage: java -agentlib:hprof=[help]|[&lt;option&gt;=&lt;value&gt;, ...]<br><br>Option Name and Value Description Default<br>--------------------- ----------- -------<br>heap=dump|sites|all heap profiling all<br>cpu=samples|times|old CPU usage off<br>monitor=y|n monitor contention n<br>format=a|b text(txt) or binary output a<br>file=&lt;file&gt; write data to file java.hprof[{.txt}]<br>net=&lt;host&gt;:&lt;port&gt; send data over a socket off<br>depth=&lt;size&gt; stack trace depth 4<br>interval=&lt;ms&gt; sample interval in ms 10<br>cutoff=&lt;value&gt; output cutoff point 0.0001<br>lineno=y|n line number in traces? y<br>thread=y|n thread in traces? n<br>doe=y|n dump on exit? y<br>msa=y|n Solaris micro state accounting n<br>force=y|n force output to &lt;file&gt; y<br>verbose=y|n print messages about dumps y<br><br>Obsolete Options<br>----------------<br>gc_okay=y|n<br><br>Examples<br>--------<br> - Get sample cpu information every 20 millisec, with a stack depth of 3:<br> java -agentlib:hprof=cpu=samples,interval=20,depth=3 classname<br> - Get heap usage information based on the allocation sites:<br> java -agentlib:hprof=heap=sites classname<br><br>Notes<br>-----<br> - The option format=b cannot be used with monitor=y.<br> - The option format=b cannot be used with cpu=old|times.<br> - Use of the -Xrunhprof interface can still be used, e.g.<br> java -Xrunhprof:[help]|[&lt;option&gt;=&lt;value&gt;, ...]<br> will behave exactly the same as:<br> java -agentlib:hprof=[help]|[&lt;option&gt;=&lt;value&gt;, ...]<br><br>Warnings<br>--------<br> - This is demonstration code for the JVMTI interface and use of BCI,<br> it is not an official product or formal part of the JDK.<br> - The -Xrunhprof interface will be removed in a future release.<br> - The option format=b is considered experimental, this format may change<br> in a future release.<br></pre>
86</blockquote>
87<p>By default, heap profiling information (sites and dump) is written
88out
89to java.hprof.txt (ascii).&nbsp;
90The monitor=y|n option has proven to be problematic and may be replaced
91with something more useful.<br>
92</p>
93<p>The output in most cases will contain ID's for traces, threads,
94objects, etc.&nbsp; Each type of ID will typically start with a
95different number than the other ID's, e.g. traces might start with
96300000.<br>
97</p>
98<p><span style="font-weight: bold;">Note</span>: <span
99 style="font-style: italic; color: rgb(255, 0, 0);">The gc_okay option
100is no longer supported.</span><br>
101</p>
102<h2><a name="mozTocId708821" class="mozTocH4"></a>Heap Allocation
103Profiles (heap=sites)<br>
104</h2>
105Following is the heap allocation profile generated by running the Java
106compiler
107(<code>javac</code>) on a set of input files. Only parts of the
108profiler output are shown here.
109<p></p>
110<pre>Command used: javac -J-agentlib:hprof=heap=sites Hello.java<br><br>SITES BEGIN (ordered by live bytes) Fri Feb 6 13:13:42 2004<br> percent live alloc'ed stack class<br> rank self accum bytes objs bytes objs trace name<br> 1 44.13% 44.13% 1117360 13967 1117360 13967 301926 java.util.zip.ZipEntry<br> 2 8.83% 52.95% 223472 13967 223472 13967 301927 com.sun.tools.javac.util.List<br> 3 5.18% 58.13% 131088 1 131088 1 300996 byte[]<br> 4 5.18% 63.31% 131088 1 131088 1 300995 com.sun.tools.javac.util.Name[]<br> <br></pre>
111A crucial piece of information in heap profile is the amount of
112allocation that occurs
113in various parts of the program. The <code>SITES</code> record above
114tells us that 44.13% of the total space was allocated for
115java.util.zip.ZipEntry objects. Note that the amount of live data is
116only a fraction
117of the total allocation that has occurred at a given site; the rest has
118been garbage collected.
119<p>A good way to relate allocation sites to the source code is to
120record
121the dynamic stack traces that led to the heap allocation. Following is
122another part of the profiler output that illustrates the stack traces
123referred to by the four allocation sites in output shown above.
124<span style="font-family: monospace;"><br>
125</span></p>
126<pre><span style="font-family: monospace;"></span>TRACE 301926:<br> java.util.zip.ZipEntry.&lt;init&gt;(ZipEntry.java:101)<br> java.util.zip.ZipFile+3.nextElement(ZipFile.java:417)<br> com.sun.tools.javac.jvm.ClassReader.openArchive(ClassReader.java:1374)<br> com.sun.tools.javac.jvm.ClassReader.list(ClassReader.java:1631)<br><br>TRACE 301927:<br> com.sun.tools.javac.util.List.&lt;init&gt;(List.java:42)<br> com.sun.tools.javac.util.List.&lt;init&gt;(List.java:50)<br> com.sun.tools.javac.util.ListBuffer.append(ListBuffer.java:94)<br> com.sun.tools.javac.jvm.ClassReader.openArchive(ClassReader.java:1374)<br><br>TRACE 300996:<br> com.sun.tools.javac.util.Name$Table.&lt;init&gt;(Name.java:379)<br> com.sun.tools.javac.util.Name$Table.&lt;init&gt;(Name.java:481)<br> com.sun.tools.javac.util.Name$Table.make(Name.java:332)<br> com.sun.tools.javac.util.Name$Table.instance(Name.java:349)<br><br>TRACE 300995:<br> com.sun.tools.javac.util.Name$Table.&lt;init&gt;(Name.java:378)<br> com.sun.tools.javac.util.Name$Table.&lt;init&gt;(Name.java:481)<br> com.sun.tools.javac.util.Name$Table.make(Name.java:332)<br> com.sun.tools.javac.util.Name$Table.instance(Name.java:349)<init><init><init><br></init></init></init></pre>
127<blockquote></blockquote>
128<p>
129Each frame in the stack trace contains class name, method name, source
130file name, and the line number. The user can set the maximum number
131of frames collected by the HPROF agent. The default limit is 4. Stack
132traces reveal not only which methods performed heap allocation, but
133also which methods were ultimately responsible for making calls that
134resulted in memory allocation. <br>
135</p>
136<h2><a name="mozTocId634725" class="mozTocH2"></a>Heap Dump (heap=dump)</h2>
137A complete dump of the current live objects in the heap can be obtained
138with:<br>
139<pre>Command used: javac -J-agentlib:hprof=heap=dump Hello.java<br></pre>
140This is a very large output file, but can be viewed and searched in any
141editor.<br>
142<br>
143<h2><a name="mozTocId546448" class="mozTocH4"></a>CPU Usage Sampling
144Profiles (cpu=samples)<br>
145</h2>
146HPROF can collect CPU usage information by sampling threads. Following
147is part of the output collected from a run
148of the <code>javac</code> compiler.
149<p></p>
150<pre>Command used: javac -J-agentlib:hprof=cpu=samples Hello.java<br><br>CPU SAMPLES BEGIN (total = 462) Fri Feb 6 13:33:07 2004<br>rank self accum count trace method<br> 1 49.57% 49.57% 229 300187 java.util.zip.ZipFile.getNextEntry<br> 2 6.93% 56.49% 32 300190 java.util.zip.ZipEntry.initFields<br> 3 4.76% 61.26% 22 300122 java.lang.ClassLoader.defineClass2<br> 4 2.81% 64.07% 13 300188 java.util.zip.ZipFile.freeEntry<br> 5 1.95% 66.02% 9 300129 java.util.Vector.addElement<br> 6 1.73% 67.75% 8 300124 java.util.zip.ZipFile.getEntry<br> 7 1.52% 69.26% 7 300125 java.lang.ClassLoader.findBootstrapClass<br> 8 0.87% 70.13% 4 300172 com.sun.tools.javac.main.JavaCompiler.&lt;init&gt;<br> 9 0.65% 70.78% 3 300030 java.util.zip.ZipFile.open<br> 10 0.65% 71.43% 3 300175 com.sun.tools.javac.main.JavaCompiler.&lt;init&gt;<br><init>
151...
152CPU SAMPLES END
153</init></pre>
154<blockquote>
155</blockquote>
156<p>
157The HPROF agent periodically samples the stack of all running threads
158to record the most frequently active stack traces. The <code>count</code>
159field above indicates how many times a particular stack trace was found
160to be active. These stack traces correspond to the CPU usage hot spots
161in the application.<br>
162</p>
163<h2><a name="mozTocId116568" class="mozTocH2"></a>CPU Usage Times
164Profile (cpu=times)<br>
165</h2>
166HPROF can collect CPU usage information by injecting code into every
167method entry and exit, keeping track of exact method call counts and
168the time spent in each method. This uses Byte Code Injection (BCI) and
169runs considerably slower than cpu=samples. Following is part of the
170output collected from a run
171of the <code>javac</code> compiler.
172<p></p>
173<pre>Command used: javac -J-agentlib:hprof=cpu=times Hello.java<br><br>CPU TIME (ms) BEGIN (total = 2082665289) Fri Feb 6 13:43:42 2004<br>rank self accum count trace method<br> 1 3.70% 3.70% 1 311243 com.sun.tools.javac.Main.compile<br> 2 3.64% 7.34% 1 311242 com.sun.tools.javac.main.Main.compile<br> 3 3.64% 10.97% 1 311241 com.sun.tools.javac.main.Main.compile<br> 4 3.11% 14.08% 1 311173 com.sun.tools.javac.main.JavaCompiler.compile<br> 5 2.54% 16.62% 8 306183 com.sun.tools.javac.jvm.ClassReader.listAll<br> 6 2.53% 19.15% 36 306182 com.sun.tools.javac.jvm.ClassReader.list<br> 7 2.03% 21.18% 1 307195 com.sun.tools.javac.comp.Enter.main<br> 8 2.03% 23.21% 1 307194 com.sun.tools.javac.comp.Enter.complete<br> 9 1.68% 24.90% 1 306392 com.sun.tools.javac.comp.Enter.classEnter<br> 10 1.68% 26.58% 1 306388 com.sun.tools.javac.comp.Enter.classEnter<br><br>...<br>CPU TIME (ms) END</pre>
174Here the count represents the true count of the times this method was
175entered, and the percentages represent a measure of thread CPU time
176spent in those methods.<br>
177<br>
178<h2><a class="mozTocH3" name="mozTocId848088"></a>Binary Dump Format
179(format=b)</h2>
180The basic fields in the binary output are u1 (1 byte), u2 (2 byte), u4
181(4 byte), and u8 (8 byte). An ID in this implementation is a u4,
182however the size of an ID is really determined by the "size of
183identifiers" field in the header.<br>
184<br>
185<span style="font-weight: bold;">WARNING</span>: This format is still
186considered highly experimental, however, all attempts were made to
187match the format of past HPROF implementations.<br>
188<br>
189The binary output begins with the information:<br>
190<br>
191<table style="text-align: left; width: 100%; height: 124px;" border="1"
192 cellpadding="2" cellspacing="2">
193 <tbody>
194 <tr>
195 <td style="vertical-align: top;">[u1]*<br>
196 </td>
197 <td style="vertical-align: top;">An initial NULL terminated
198series of bytes representing the format name and version, in this
199implementation and historically, the string "JAVA PROFILE 1.0.1" (18
200u1 bytes) followed by a NULL byte. If the TAG "HEAP DUMP SEGMENT" is
201used this string will be "JAVA PROFILE 1.0.2". </td>
202 </tr>
203 <tr>
204 <td style="vertical-align: top;">u4<br>
205 </td>
206 <td style="vertical-align: top;">size of identifiers. Identifiers
207are used to represent UTF8 strings, objects, stack traces, etc. They
208can have the same size as host pointers or sizeof(void*), but are not
209required to be.<span style="color: rgb(0, 0, 0);"></span></td>
210 </tr>
211 <tr>
212 <td style="vertical-align: top;">u4<br>
213 </td>
214 <td style="vertical-align: top;">high word of number of
215milliseconds since 0:00 GMT, 1/1/70</td>
216 </tr>
217 <tr>
218 <td style="vertical-align: top;">u4<br>
219 </td>
220 <td style="vertical-align: top;">low word of number of
221milliseconds since 0:00 GMT, 1/1/70</td>
222 </tr>
223 </tbody>
224</table>
225<br>
226Followed by a se<span style="font-family: monospace;"></span>quence of
227records that look like:<br>
228<br>
229<table style="text-align: left; width: 100%;" border="1" cellpadding="2"
230 cellspacing="2">
231 <tbody>
232 <tr>
233 <td style="vertical-align: top;">u1<br>
234 </td>
235 <td style="vertical-align: top;">TAG: denoting the type of the
236record</td>
237 </tr>
238 <tr>
239 <td style="vertical-align: top;">u4<br>
240 </td>
241 <td style="vertical-align: top;">TIME: number of microseconds
242since the
243time stamp in the header<br>
244 </td>
245 </tr>
246 <tr>
247 <td style="vertical-align: top;">u4<br>
248 </td>
249 <td style="vertical-align: top;">LENGTH: number of bytes that
250follow this
251u4 field and belong to this record<br>
252 </td>
253 </tr>
254 <tr>
255 <td style="vertical-align: top;">[u1]*<br>
256 </td>
257 <td style="vertical-align: top;">BODY: as many bytes as specified
258in
259the above u4 field<br>
260 </td>
261 </tr>
262 </tbody>
263</table>
264<br>
265<br>
266The following TAGs are supported:<br>
267<br>
268<table style="text-align: left; width: 100%;" border="1" cellpadding="2"
269 cellspacing="2">
270 <tbody>
271 <tr>
272 <td style="vertical-align: top;">STRING IN UTF8<br>
273 </td>
274 <td style="vertical-align: top;">0x01<br>
275 </td>
276 <td style="vertical-align: top;">
277 <table style="text-align: left; width: 100%;" border="1"
278 cellpadding="2" cellspacing="2">
279 <tbody>
280 <tr>
281 <td style="vertical-align: top;">ID<br>
282 </td>
283 <td style="vertical-align: top;">ID for this string<br>
284 </td>
285 </tr>
286 <tr>
287 <td style="vertical-align: top;">[u1]*<br>
288 </td>
289 <td style="vertical-align: top;">UTF8 characters for string
290(NOT NULL terminated)<br>
291 </td>
292 </tr>
293 </tbody>
294 </table>
295 <br>
296 </td>
297 </tr>
298 <tr>
299 <td style="vertical-align: top;">LOAD CLASS<br>
300 </td>
301 <td style="vertical-align: top;">0x02<br>
302 </td>
303 <td style="vertical-align: top;">
304 <table style="text-align: left; width: 100%;" border="1"
305 cellpadding="2" cellspacing="2">
306 <tbody>
307 <tr>
308 <td style="vertical-align: top;">u4<br>
309 </td>
310 <td style="vertical-align: top;">class serial number
311(always &gt; 0)<br>
312 </td>
313 </tr>
314 <tr>
315 <td style="vertical-align: top;">ID<br>
316 </td>
317 <td style="vertical-align: top;">class object ID<br>
318 </td>
319 </tr>
320 <tr>
321 <td style="vertical-align: top;">u4<br>
322 </td>
323 <td style="vertical-align: top;">stack trace serial number<br>
324 </td>
325 </tr>
326 <tr>
327 <td style="vertical-align: top;">ID<br>
328 </td>
329 <td style="vertical-align: top;">class name string ID<br>
330 </td>
331 </tr>
332 </tbody>
333 </table>
334 <br>
335 </td>
336 </tr>
337 <tr>
338 <td style="vertical-align: top;">UNLOAD CLASS<br>
339 </td>
340 <td style="vertical-align: top;">0x03<br>
341 </td>
342 <td style="vertical-align: top;">
343 <table style="text-align: left; width: 100%;" border="1"
344 cellpadding="2" cellspacing="2">
345 <tbody>
346 <tr>
347 <td style="vertical-align: top;">u4<br>
348 </td>
349 <td style="vertical-align: top;">class serial number<br>
350 </td>
351 </tr>
352 </tbody>
353 </table>
354 <br>
355 </td>
356 </tr>
357 <tr>
358 <td style="vertical-align: top;">STACK FRAME<br>
359 </td>
360 <td style="vertical-align: top;">0x04<br>
361 </td>
362 <td style="vertical-align: top;">
363 <table style="text-align: left; width: 100%;" border="1"
364 cellpadding="2" cellspacing="2">
365 <tbody>
366 <tr>
367 <td style="vertical-align: top;">ID<br>
368 </td>
369 <td style="vertical-align: top;">stack frame ID<br>
370 </td>
371 </tr>
372 <tr>
373 <td style="vertical-align: top;">ID<br>
374 </td>
375 <td style="vertical-align: top;">method name string ID<br>
376 </td>
377 </tr>
378 <tr>
379 <td style="vertical-align: top;">ID<br>
380 </td>
381 <td style="vertical-align: top;">method signature string ID<br>
382 </td>
383 </tr>
384 <tr>
385 <td style="vertical-align: top;">ID<br>
386 </td>
387 <td style="vertical-align: top;">source file name string ID<br>
388 </td>
389 </tr>
390 <tr>
391 <td style="vertical-align: top;">u4<br>
392 </td>
393 <td style="vertical-align: top;">class serial number<br>
394 </td>
395 </tr>
396 <tr>
397 <td style="vertical-align: top;">u4<br>
398 </td>
399 <td style="vertical-align: top;">
400 <table style="text-align: left; width: 100%;" border="1"
401 cellpadding="2" cellspacing="2">
402 <tbody>
403 <tr>
404 <td style="vertical-align: top;">&gt; 0<br>
405 </td>
406 <td style="vertical-align: top;">line number<br>
407 </td>
408 </tr>
409 <tr>
410 <td style="vertical-align: top;">0<br>
411 </td>
412 <td style="vertical-align: top;">no line information
413available<br>
414 </td>
415 </tr>
416 <tr>
417 <td style="vertical-align: top;">-1<br>
418 </td>
419 <td style="vertical-align: top;">unknown location<br>
420 </td>
421 </tr>
422 <tr>
423 <td style="vertical-align: top;">-2<br>
424 </td>
425 <td style="vertical-align: top;">compiled method (<span
426 style="font-style: italic; color: rgb(255, 0, 0);">Not implemented</span>)<br>
427 </td>
428 </tr>
429 <tr>
430 <td style="vertical-align: top;">-3<br>
431 </td>
432 <td style="vertical-align: top;">native method (<span
433 style="color: rgb(255, 0, 0); font-style: italic;">Not implemented</span>)<br>
434 </td>
435 </tr>
436 </tbody>
437 </table>
438 <br>
439 </td>
440 </tr>
441 </tbody>
442 </table>
443 <br>
444 </td>
445 </tr>
446 <tr>
447 <td style="vertical-align: top;">STACK TRACE<br>
448 </td>
449 <td style="vertical-align: top;">0x05<br>
450 </td>
451 <td style="vertical-align: top;">
452 <table style="text-align: left; width: 100%;" border="1"
453 cellpadding="2" cellspacing="2">
454 <tbody>
455 <tr>
456 <td style="vertical-align: top;">u4<br>
457 </td>
458 <td style="vertical-align: top;">stack trace serial number<br>
459 </td>
460 </tr>
461 <tr>
462 <td style="vertical-align: top;">u4<br>
463 </td>
464 <td style="vertical-align: top;">thread serial number<br>
465 </td>
466 </tr>
467 <tr>
468 <td style="vertical-align: top;">u4<br>
469 </td>
470 <td style="vertical-align: top;">number of frames<br>
471 </td>
472 </tr>
473 <tr>
474 <td style="vertical-align: top;">[ID]*<br>
475 </td>
476 <td style="vertical-align: top;">series of stack frame ID's<br>
477 </td>
478 </tr>
479 </tbody>
480 </table>
481 <br>
482 </td>
483 </tr>
484 <tr>
485 <td style="vertical-align: top;">ALLOC SITES<br>
486 </td>
487 <td style="vertical-align: top;">0x06<br>
488 </td>
489 <td style="vertical-align: top;">
490 <table style="text-align: left; width: 100%;" border="1"
491 cellpadding="2" cellspacing="2">
492 <tbody>
493 <tr>
494 <td style="vertical-align: top;">u2<br>
495 </td>
496 <td style="vertical-align: top;">Bit mask flags:<br>
497 <table style="text-align: left; width: 441px; height: 74px;"
498 border="1" cellpadding="2" cellspacing="2">
499 <tbody>
500 <tr>
501 <td style="vertical-align: top;">0x1<br>
502 </td>
503 <td style="vertical-align: top;">incremental vs.
504complete<br>
505 </td>
506 </tr>
507 <tr>
508 <td style="vertical-align: top;">0x2<br>
509 </td>
510 <td style="vertical-align: top; text-align: left;">sorted
511by allocation vs. line<br>
512 </td>
513 </tr>
514 <tr>
515 <td style="vertical-align: top;">0x4<br>
516 </td>
517 <td style="vertical-align: top;">whether to force GC
518(<span style="font-style: italic; color: rgb(255, 0, 0);">Not
519Implemented</span>)<br>
520 </td>
521 </tr>
522 </tbody>
523 </table>
524 <br>
525 </td>
526 </tr>
527 <tr>
528 <td style="vertical-align: top;">u4<br>
529 </td>
530 <td style="vertical-align: top;">cutoff ratio (floating
531point)<br>
532 </td>
533 </tr>
534 <tr>
535 <td style="vertical-align: top;">u4<br>
536 </td>
537 <td style="vertical-align: top;">total live bytes<br>
538 </td>
539 </tr>
540 <tr>
541 <td style="vertical-align: top;">u4<br>
542 </td>
543 <td style="vertical-align: top;">total live instances<br>
544 </td>
545 </tr>
546 <tr>
547 <td style="vertical-align: top;">u8<br>
548 </td>
549 <td style="vertical-align: top;">total bytes allocated<br>
550 </td>
551 </tr>
552 <tr>
553 <td style="vertical-align: top;">u8<br>
554 </td>
555 <td style="vertical-align: top;">total instances allocated<br>
556 </td>
557 </tr>
558 <tr>
559 <td style="vertical-align: top;">u4<br>
560 </td>
561 <td style="vertical-align: top;">number of sites that
562follow:<br>
563 <table style="text-align: left; width: 100%;" border="1"
564 cellpadding="2" cellspacing="2">
565 <tbody>
566 <tr>
567 <td style="vertical-align: top;">u1<br>
568 </td>
569 <td style="vertical-align: top;">array indicator: 0
570means not an array, non-zero means an array of this type (See <a
571 href="#Basic_Type">Basic Type</a>)<br>
572 </td>
573 </tr>
574 <tr>
575 <td style="vertical-align: top;">u4<br>
576 </td>
577 <td style="vertical-align: top;">class serial number<br>
578 </td>
579 </tr>
580 <tr>
581 <td style="vertical-align: top;">u4<br>
582 </td>
583 <td style="vertical-align: top;">stack trace serial
584number<br>
585 </td>
586 </tr>
587 <tr>
588 <td style="vertical-align: top;">u4<br>
589 </td>
590 <td style="vertical-align: top;">number of live bytes<br>
591 </td>
592 </tr>
593 <tr>
594 <td style="vertical-align: top;">u4<br>
595 </td>
596 <td style="vertical-align: top;">number of live
597instances<br>
598 </td>
599 </tr>
600 <tr>
601 <td style="vertical-align: top;">u4<br>
602 </td>
603 <td style="vertical-align: top;">number of bytes
604allocated<br>
605 </td>
606 </tr>
607 <tr>
608 <td style="vertical-align: top;">u4<br>
609 </td>
610 <td style="vertical-align: top;">number of instances
611allocated<br>
612 </td>
613 </tr>
614 </tbody>
615 </table>
616 <br>
617 </td>
618 </tr>
619 </tbody>
620 </table>
621 <br>
622 </td>
623 </tr>
624 <tr>
625 <td style="vertical-align: top;">HEAP SUMMARY<br>
626 </td>
627 <td style="vertical-align: top;">0x07<br>
628 </td>
629 <td style="vertical-align: top;">
630 <table style="text-align: left; width: 100%;" border="1"
631 cellpadding="2" cellspacing="2">
632 <tbody>
633 <tr>
634 <td style="vertical-align: top;">u4<br>
635 </td>
636 <td style="vertical-align: top;">total live bytes<br>
637 </td>
638 </tr>
639 <tr>
640 <td style="vertical-align: top;">u4<br>
641 </td>
642 <td style="vertical-align: top;">total live instances<br>
643 </td>
644 </tr>
645 <tr>
646 <td style="vertical-align: top;">u8<br>
647 </td>
648 <td style="vertical-align: top;">total bytes allocated<br>
649 </td>
650 </tr>
651 <tr>
652 <td style="vertical-align: top;">u8<br>
653 </td>
654 <td style="vertical-align: top;">total instances allocated<br>
655 </td>
656 </tr>
657 </tbody>
658 </table>
659 <br>
660 </td>
661 </tr>
662 <tr>
663 <td style="vertical-align: top;">START THREAD<br>
664 </td>
665 <td style="vertical-align: top;">0x0A<br>
666 </td>
667 <td style="vertical-align: top;">
668 <table style="text-align: left; width: 100%;" border="1"
669 cellpadding="2" cellspacing="2">
670 <tbody>
671 <tr>
672 <td style="vertical-align: top;">u4<br>
673 </td>
674 <td style="vertical-align: top;">thread serial number<br>
675 </td>
676 </tr>
677 <tr>
678 <td style="vertical-align: top;">ID<br>
679 </td>
680 <td style="vertical-align: top;">thread object ID<br>
681 </td>
682 </tr>
683 <tr>
684 <td style="vertical-align: top;">u4<br>
685 </td>
686 <td style="vertical-align: top;">stack trace serial number<br>
687 </td>
688 </tr>
689 <tr>
690 <td style="vertical-align: top;">ID<br>
691 </td>
692 <td style="vertical-align: top;">thread name string ID<br>
693 </td>
694 </tr>
695 <tr>
696 <td style="vertical-align: top;">ID<br>
697 </td>
698 <td style="vertical-align: top;">thread group name ID<br>
699 </td>
700 </tr>
701 <tr>
702 <td style="vertical-align: top;">ID<br>
703 </td>
704 <td style="vertical-align: top;">thread parent group name ID<br>
705 </td>
706 </tr>
707 </tbody>
708 </table>
709 <br>
710 </td>
711 </tr>
712 <tr>
713 <td style="vertical-align: top;">END THREAD<br>
714 </td>
715 <td style="vertical-align: top;">0x0B<br>
716 </td>
717 <td style="vertical-align: top;">
718 <table style="text-align: left; width: 100%;" border="1"
719 cellpadding="2" cellspacing="2">
720 <tbody>
721 <tr>
722 <td style="vertical-align: top;">u4<br>
723 </td>
724 <td style="vertical-align: top;">thread serial number<br>
725 </td>
726 </tr>
727 </tbody>
728 </table>
729 <br>
730 </td>
731 </tr>
732 <tr>
733 <td style="vertical-align: top;">HEAP DUMP<br>
734 <span style="font-style: italic;">or</span><br>
735HEAP DUMP SEGMENT<br>
736 </td>
737 <td style="vertical-align: top;">0x0C<br>
738 <span style="font-style: italic;">or</span><br>
7390x1C<br>
740 </td>
741 <td style="vertical-align: top;">Contains any number of sub-tags,
742each begins a u1 field (no order implied here):<br>
743 <table style="text-align: left; width: 100%;" border="1"
744 cellpadding="2" cellspacing="2">
745 <tbody>
746 <tr>
747 <td style="vertical-align: top;">ROOT UNKNOWN<br>
748 </td>
749 <td style="vertical-align: top;">0xFF<br>
750 </td>
751 <td style="vertical-align: top;">
752 <table style="text-align: left; width: 100%;" border="1"
753 cellpadding="2" cellspacing="2">
754 <tbody>
755 <tr>
756 <td style="vertical-align: top;">ID<br>
757 </td>
758 <td style="vertical-align: top;">object ID<br>
759 </td>
760 </tr>
761 </tbody>
762 </table>
763 <br>
764 </td>
765 </tr>
766 <tr>
767 <td style="vertical-align: top;">ROOT JNI GLOBAL<br>
768 </td>
769 <td style="vertical-align: top;">0x01<br>
770 </td>
771 <td style="vertical-align: top;">
772 <table style="text-align: left; width: 100%;" border="1"
773 cellpadding="2" cellspacing="2">
774 <tbody>
775 <tr>
776 <td style="vertical-align: top;">ID<br>
777 </td>
778 <td style="vertical-align: top;">object ID<br>
779 </td>
780 </tr>
781 <tr>
782 <td style="vertical-align: top;">ID<br>
783 </td>
784 <td style="vertical-align: top;">JNI global ref ID<br>
785 </td>
786 </tr>
787 </tbody>
788 </table>
789 <br>
790 </td>
791 </tr>
792 <tr>
793 <td style="vertical-align: top;">ROOT JNI LOCAL<br>
794 </td>
795 <td style="vertical-align: top;">0x02<br>
796 </td>
797 <td style="vertical-align: top;">
798 <table style="text-align: left; width: 100%;" border="1"
799 cellpadding="2" cellspacing="2">
800 <tbody>
801 <tr>
802 <td style="vertical-align: top;">ID<br>
803 </td>
804 <td style="vertical-align: top;">object ID<br>
805 </td>
806 </tr>
807 <tr>
808 <td style="vertical-align: top;">u4<br>
809 </td>
810 <td style="vertical-align: top;">thread serial number<br>
811 </td>
812 </tr>
813 <tr>
814 <td style="vertical-align: top;">u4<br>
815 </td>
816 <td style="vertical-align: top;">frame number in
817stack trace (-1 for empty)<br>
818 </td>
819 </tr>
820 </tbody>
821 </table>
822 <br>
823 </td>
824 </tr>
825 <tr>
826 <td style="vertical-align: top;">ROOT JAVA FRAME<br>
827 </td>
828 <td style="vertical-align: top;">0x03<br>
829 </td>
830 <td style="vertical-align: top;">
831 <table style="text-align: left; width: 100%;" border="1"
832 cellpadding="2" cellspacing="2">
833 <tbody>
834 <tr>
835 <td style="vertical-align: top;">ID<br>
836 </td>
837 <td style="vertical-align: top;">object ID<br>
838 </td>
839 </tr>
840 <tr>
841 <td style="vertical-align: top;">u4<br>
842 </td>
843 <td style="vertical-align: top;">thread serial number<br>
844 </td>
845 </tr>
846 <tr>
847 <td style="vertical-align: top;">u4<br>
848 </td>
849 <td style="vertical-align: top;">frame number in
850stack trace (-1 for empty)</td>
851 </tr>
852 </tbody>
853 </table>
854 <br>
855 </td>
856 </tr>
857 <tr>
858 <td style="vertical-align: top;">ROOT NATIVE STACK<br>
859 </td>
860 <td style="vertical-align: top;">0x04<br>
861 </td>
862 <td style="vertical-align: top;">
863 <table style="text-align: left; width: 100%;" border="1"
864 cellpadding="2" cellspacing="2">
865 <tbody>
866 <tr>
867 <td style="vertical-align: top;">ID<br>
868 </td>
869 <td style="vertical-align: top;">object ID<br>
870 </td>
871 </tr>
872 <tr>
873 <td style="vertical-align: top;">u4<br>
874 </td>
875 <td style="vertical-align: top;">thread serial number<br>
876 </td>
877 </tr>
878 </tbody>
879 </table>
880 <br>
881 </td>
882 </tr>
883 <tr>
884 <td style="vertical-align: top;">ROOT STICKY CLASS<br>
885 </td>
886 <td style="vertical-align: top;">0x05<br>
887 </td>
888 <td style="vertical-align: top;">
889 <table style="text-align: left; width: 100%;" border="1"
890 cellpadding="2" cellspacing="2">
891 <tbody>
892 <tr>
893 <td style="vertical-align: top;">ID<br>
894 </td>
895 <td style="vertical-align: top;">object ID<br>
896 </td>
897 </tr>
898 </tbody>
899 </table>
900 <br>
901 </td>
902 </tr>
903 <tr>
904 <td style="vertical-align: top;">ROOT THREAD BLOCK<br>
905 </td>
906 <td style="vertical-align: top;">0x06<br>
907 </td>
908 <td style="vertical-align: top;">
909 <table style="text-align: left; width: 100%;" border="1"
910 cellpadding="2" cellspacing="2">
911 <tbody>
912 <tr>
913 <td style="vertical-align: top;">ID<br>
914 </td>
915 <td style="vertical-align: top;">object ID<br>
916 </td>
917 </tr>
918 <tr>
919 <td style="vertical-align: top;">u4<br>
920 </td>
921 <td style="vertical-align: top;">thread serial number<br>
922 </td>
923 </tr>
924 </tbody>
925 </table>
926 <br>
927 </td>
928 </tr>
929 <tr>
930 <td style="vertical-align: top;">ROOT MONITOR USED<br>
931 </td>
932 <td style="vertical-align: top;">0x07<br>
933 </td>
934 <td style="vertical-align: top;">
935 <table style="text-align: left; width: 100%;" border="1"
936 cellpadding="2" cellspacing="2">
937 <tbody>
938 <tr>
939 <td style="vertical-align: top;">ID<br>
940 </td>
941 <td style="vertical-align: top;">object ID<br>
942 </td>
943 </tr>
944 </tbody>
945 </table>
946 <br>
947 </td>
948 </tr>
949 <tr>
950 <td style="vertical-align: top;">ROOT THREAD OBJECT<br>
951 </td>
952 <td style="vertical-align: top;">0x08<br>
953 </td>
954 <td style="vertical-align: top;">
955 <table style="text-align: left; width: 100%;" border="1"
956 cellpadding="2" cellspacing="2">
957 <tbody>
958 <tr>
959 <td style="vertical-align: top;">ID<br>
960 </td>
961 <td style="vertical-align: top;">thread object ID<br>
962 </td>
963 </tr>
964 <tr>
965 <td style="vertical-align: top;">u4<br>
966 </td>
967 <td style="vertical-align: top;">thread serial number<br>
968 </td>
969 </tr>
970 <tr>
971 <td style="vertical-align: top;">u4<br>
972 </td>
973 <td style="vertical-align: top;">stack trace serial
974number<br>
975 </td>
976 </tr>
977 </tbody>
978 </table>
979 <br>
980 </td>
981 </tr>
982 <tr>
983 <td style="vertical-align: top;">CLASS DUMP<br>
984 </td>
985 <td style="vertical-align: top;">0x20<br>
986 </td>
987 <td style="vertical-align: top;">
988 <table style="text-align: left; width: 100%;" border="1"
989 cellpadding="2" cellspacing="2">
990 <tbody>
991 <tr>
992 <td style="vertical-align: top;">ID<br>
993 </td>
994 <td style="vertical-align: top;">class object ID<br>
995 </td>
996 </tr>
997 <tr>
998 <td style="vertical-align: top;">u4<br>
999 </td>
1000 <td style="vertical-align: top;">stack trace serial
1001number<br>
1002 </td>
1003 </tr>
1004 <tr>
1005 <td style="vertical-align: top;">ID<br>
1006 </td>
1007 <td style="vertical-align: top;">super class object ID<br>
1008 </td>
1009 </tr>
1010 <tr>
1011 <td style="vertical-align: top;">ID<br>
1012 </td>
1013 <td style="vertical-align: top;">class loader object
1014ID<br>
1015 </td>
1016 </tr>
1017 <tr>
1018 <td style="vertical-align: top;">ID<br>
1019 </td>
1020 <td style="vertical-align: top;">signers object ID<br>
1021 </td>
1022 </tr>
1023 <tr>
1024 <td style="vertical-align: top;">ID<br>
1025 </td>
1026 <td style="vertical-align: top;">protection domain
1027object ID<br>
1028 </td>
1029 </tr>
1030 <tr>
1031 <td style="vertical-align: top;">ID<br>
1032 </td>
1033 <td style="vertical-align: top;">reserved<br>
1034 </td>
1035 </tr>
1036 <tr>
1037 <td style="vertical-align: top;">ID<br>
1038 </td>
1039 <td style="vertical-align: top;">reserved<br>
1040 </td>
1041 </tr>
1042 <tr>
1043 <td style="vertical-align: top;">u4<br>
1044 </td>
1045 <td style="vertical-align: top;">instance size (in
1046bytes)<br>
1047 </td>
1048 </tr>
1049 <tr>
1050 <td style="vertical-align: top;">u2<br>
1051 </td>
1052 <td style="vertical-align: top;">size of constant
1053pool and number of records that follow:<br>
1054 <table style="text-align: left; width: 100%;"
1055 border="1" cellpadding="2" cellspacing="2">
1056 <tbody>
1057 <tr>
1058 <td style="vertical-align: top;">u2<br>
1059 </td>
1060 <td style="vertical-align: top;">constant pool
1061index<br>
1062 </td>
1063 </tr>
1064 <tr>
1065 <td style="vertical-align: top;">u1<br>
1066 </td>
1067 <td style="vertical-align: top;">type of entry:
1068(See <a href="#Basic_Type">Basic Type</a>)<br>
1069 </td>
1070 </tr>
1071 <tr>
1072 <td style="vertical-align: top;">value<br>
1073 </td>
1074 <td style="vertical-align: top;">value of entry
1075(u1, u2, u4, or u8 based on type of entry)<span
1076 style="font-style: italic; color: rgb(255, 0, 0);"></span><br>
1077 </td>
1078 </tr>
1079 </tbody>
1080 </table>
1081 <br>
1082 </td>
1083 </tr>
1084 <tr>
1085 <td style="vertical-align: top;">u2<br>
1086 </td>
1087 <td style="vertical-align: top;">Number of static
1088fields:<br>
1089 <table style="text-align: left; width: 100%;"
1090 border="1" cellpadding="2" cellspacing="2">
1091 <tbody>
1092 <tr>
1093 <td style="vertical-align: top;">ID<br>
1094 </td>
1095 <td style="vertical-align: top;">static field
1096name string ID<br>
1097 </td>
1098 </tr>
1099 <tr>
1100 <td style="vertical-align: top;">u1<br>
1101 </td>
1102 <td style="vertical-align: top;">type of field:
1103(See <a href="#Basic_Type">Basic Type</a>)<br>
1104 </td>
1105 </tr>
1106 <tr>
1107 <td style="vertical-align: top;">value<br>
1108 </td>
1109 <td style="vertical-align: top;">value of entry
1110(u1, u2, u4, or u8 based on type of field) <span
1111 style="font-style: italic; color: rgb(255, 0, 0);"></span><br>
1112 </td>
1113 </tr>
1114 </tbody>
1115 </table>
1116 <br>
1117 </td>
1118 </tr>
1119 <tr>
1120 <td style="vertical-align: top;">u2<br>
1121 </td>
1122 <td style="vertical-align: top;">Number of instance
1123fields (not including super class's)<br>
1124 <table style="text-align: left; width: 100%;"
1125 border="1" cellpadding="2" cellspacing="2">
1126 <tbody>
1127 <tr>
1128 <td style="vertical-align: top;">ID<br>
1129 </td>
1130 <td style="vertical-align: top;">field name
1131string ID<br>
1132 </td>
1133 </tr>
1134 <tr>
1135 <td style="vertical-align: top;">u1<br>
1136 </td>
1137 <td style="vertical-align: top;">type of field:
1138(See <a href="#Basic_Type">Basic Type</a>)<br>
1139 </td>
1140 </tr>
1141 </tbody>
1142 </table>
1143 <br>
1144 </td>
1145 </tr>
1146 </tbody>
1147 </table>
1148 <br>
1149 </td>
1150 </tr>
1151 <tr>
1152 <td style="vertical-align: top;">INSTANCE DUMP<br>
1153 </td>
1154 <td style="vertical-align: top;">0x21<br>
1155 </td>
1156 <td style="vertical-align: top;"><br>
1157 <table style="text-align: left; width: 100%;" border="1"
1158 cellpadding="2" cellspacing="2">
1159 <tbody>
1160 <tr>
1161 <td style="vertical-align: top;">ID<br>
1162 </td>
1163 <td style="vertical-align: top;">object ID<br>
1164 </td>
1165 </tr>
1166 <tr>
1167 <td style="vertical-align: top;">u4<br>
1168 </td>
1169 <td style="vertical-align: top;">stack trace serial
1170number<br>
1171 </td>
1172 </tr>
1173 <tr>
1174 <td style="vertical-align: top;">ID<br>
1175 </td>
1176 <td style="vertical-align: top;">class object ID<br>
1177 </td>
1178 </tr>
1179 <tr>
1180 <td style="vertical-align: top;">u4<br>
1181 </td>
1182 <td style="vertical-align: top;">number of bytes that
1183follow<br>
1184 </td>
1185 </tr>
1186 <tr>
1187 <td style="vertical-align: top;">[value]*<br>
1188 </td>
1189 <td style="vertical-align: top;">instance field
1190values (this class, followed by super class, etc)<span
1191 style="font-style: italic; color: rgb(255, 0, 0);"></span><br>
1192 </td>
1193 </tr>
1194 </tbody>
1195 </table>
1196 <br>
1197 </td>
1198 </tr>
1199 <tr>
1200 <td style="vertical-align: top;">OBJECT ARRAY DUMP<br>
1201 </td>
1202 <td style="vertical-align: top;">0x22<br>
1203 </td>
1204 <td style="vertical-align: top;"><br>
1205 <table style="text-align: left; width: 100%;" border="1"
1206 cellpadding="2" cellspacing="2">
1207 <tbody>
1208 <tr>
1209 <td style="vertical-align: top;">ID<br>
1210 </td>
1211 <td style="vertical-align: top;">array object ID<br>
1212 </td>
1213 </tr>
1214 <tr>
1215 <td style="vertical-align: top;">u4<br>
1216 </td>
1217 <td style="vertical-align: top;">stack trace serial
1218number<br>
1219 </td>
1220 </tr>
1221 <tr>
1222 <td style="vertical-align: top;">u4<br>
1223 </td>
1224 <td style="vertical-align: top;">number of elements<br>
1225 </td>
1226 </tr>
1227 <tr>
1228 <td style="vertical-align: top;">ID<br>
1229 </td>
1230 <td style="vertical-align: top;">array class object
1231ID<br>
1232 </td>
1233 </tr>
1234 <tr>
1235 <td style="vertical-align: top;">[ID]*<br>
1236 </td>
1237 <td style="vertical-align: top;">elements<br>
1238 </td>
1239 </tr>
1240 </tbody>
1241 </table>
1242 <br>
1243 </td>
1244 </tr>
1245 <tr>
1246 <td style="vertical-align: top;">PRIMITIVE ARRAY DUMP<br>
1247 </td>
1248 <td style="vertical-align: top;">0x23<br>
1249 </td>
1250 <td style="vertical-align: top;">
1251 <table style="text-align: left; width: 100%;" border="1"
1252 cellpadding="2" cellspacing="2">
1253 <tbody>
1254 <tr>
1255 <td style="vertical-align: top;">ID<br>
1256 </td>
1257 <td style="vertical-align: top;">array object ID<br>
1258 </td>
1259 </tr>
1260 <tr>
1261 <td style="vertical-align: top;">u4<br>
1262 </td>
1263 <td style="vertical-align: top;">stack trace serial
1264number<br>
1265 </td>
1266 </tr>
1267 <tr>
1268 <td style="vertical-align: top;">u4<br>
1269 </td>
1270 <td style="vertical-align: top;">number of elements<br>
1271 </td>
1272 </tr>
1273 <tr>
1274 <td style="vertical-align: top;">u1<br>
1275 </td>
1276 <td style="vertical-align: top;">element type (See <a
1277 href="#Basic_Type">Basic Type</a>)<br>
1278 </td>
1279 </tr>
1280 <tr>
1281 <td style="vertical-align: top;">[u1]*<br>
1282 </td>
1283 <td style="vertical-align: top;">elements (packed
1284array) </td>
1285 </tr>
1286 </tbody>
1287 </table>
1288 <br>
1289 </td>
1290 </tr>
1291 </tbody>
1292 </table>
1293 <br>
1294 </td>
1295 </tr>
1296 <tr>
1297 <td style="vertical-align: top;">HEAP DUMP END<br>
1298 </td>
1299 <td style="vertical-align: top;">0x2C<br>
1300 </td>
1301 <td style="vertical-align: top;">Terminates a series of HEAP DUMP
1302SEGMENTS.&nbsp; Concatenation of HEAP DUMP SEGMENTS equals a HEAP DUMP.<br>
1303 </td>
1304 </tr>
1305 <tr>
1306 <td style="vertical-align: top;">CPU SAMPLES<br>
1307 </td>
1308 <td style="vertical-align: top;">0x0D<br>
1309 </td>
1310 <td style="vertical-align: top;">
1311 <table style="text-align: left; width: 100%;" border="1"
1312 cellpadding="2" cellspacing="2">
1313 <tbody>
1314 <tr>
1315 <td style="vertical-align: top;">u4<br>
1316 </td>
1317 <td style="vertical-align: top;">total number of samples<br>
1318 </td>
1319 </tr>
1320 <tr>
1321 <td style="vertical-align: top;">u4<br>
1322 </td>
1323 <td style="vertical-align: top;">number of traces that
1324follow:<br>
1325 <table style="text-align: left; width: 100%;" border="1"
1326 cellpadding="2" cellspacing="2">
1327 <tbody>
1328 <tr>
1329 <td style="vertical-align: top;">u4<br>
1330 </td>
1331 <td style="vertical-align: top;">number of samples<br>
1332 </td>
1333 </tr>
1334 <tr>
1335 <td style="vertical-align: top;">u4<br>
1336 </td>
1337 <td style="vertical-align: top;">stack trace serial
1338number<br>
1339 </td>
1340 </tr>
1341 </tbody>
1342 </table>
1343 <br>
1344 </td>
1345 </tr>
1346 </tbody>
1347 </table>
1348 <br>
1349 </td>
1350 </tr>
1351 <tr>
1352 <td style="vertical-align: top;">CONTROL SETTINGS<br>
1353 </td>
1354 <td style="vertical-align: top;">0x0E<br>
1355 </td>
1356 <td style="vertical-align: top;">
1357 <table style="text-align: left; width: 100%;" border="1"
1358 cellpadding="2" cellspacing="2">
1359 <tbody>
1360 <tr>
1361 <td style="vertical-align: top;">u4<br>
1362 </td>
1363 <td style="vertical-align: top;">Bit mask flags:<br>
1364 <table style="text-align: left; width: 100%;" border="1"
1365 cellpadding="2" cellspacing="2">
1366 <tbody>
1367 <tr>
1368 <td style="vertical-align: top;">0x1<br>
1369 </td>
1370 <td style="vertical-align: top;">alloc traces on/off<br>
1371 </td>
1372 </tr>
1373 <tr>
1374 <td style="vertical-align: top;">0x2<br>
1375 </td>
1376 <td style="vertical-align: top;">cpu sampling on/off<br>
1377 </td>
1378 </tr>
1379 </tbody>
1380 </table>
1381 <br>
1382 </td>
1383 </tr>
1384 <tr>
1385 <td style="vertical-align: top;">u2<br>
1386 </td>
1387 <td style="vertical-align: top;">stack trace depth<br>
1388 </td>
1389 </tr>
1390 </tbody>
1391 </table>
1392 <br>
1393 </td>
1394 </tr>
1395 </tbody>
1396</table>
1397<span style="font-weight: bold;"><br>
1398</span><a name="Basic_Type"></a>Basic Type
1399<table style="text-align: left; width: 296px; height: 221px;" border="1"
1400 cellpadding="2" cellspacing="2">
1401 <tbody>
1402 <tr>
1403 <td style="vertical-align: top;">2<br>
1404 </td>
1405 <td style="vertical-align: top;">object<br>
1406 </td>
1407 </tr>
1408 <tr>
1409 <td style="vertical-align: top;">4<br>
1410 </td>
1411 <td style="vertical-align: top;">boolean<br>
1412 </td>
1413 </tr>
1414 <tr>
1415 <td style="vertical-align: top;">5<br>
1416 </td>
1417 <td style="vertical-align: top;">char<br>
1418 </td>
1419 </tr>
1420 <tr>
1421 <td style="vertical-align: top;">6<br>
1422 </td>
1423 <td style="vertical-align: top;">float<br>
1424 </td>
1425 </tr>
1426 <tr>
1427 <td style="vertical-align: top;">7<br>
1428 </td>
1429 <td style="vertical-align: top;">double<br>
1430 </td>
1431 </tr>
1432 <tr>
1433 <td style="vertical-align: top;">8<br>
1434 </td>
1435 <td style="vertical-align: top;">byte<br>
1436 </td>
1437 </tr>
1438 <tr>
1439 <td style="vertical-align: top;">9<br>
1440 </td>
1441 <td style="vertical-align: top;">short<br>
1442 </td>
1443 </tr>
1444 <tr>
1445 <td style="vertical-align: top;">10<br>
1446 </td>
1447 <td style="vertical-align: top;">int<br>
1448 </td>
1449 </tr>
1450 <tr>
1451 <td style="vertical-align: top;">11<br>
1452 </td>
1453 <td style="vertical-align: top;">long<br>
1454 </td>
1455 </tr>
1456 </tbody>
1457</table>
1458<h3><a name="mozTocId348360" class="mozTocH3"></a>Handling of Arrays</h3>
1459<br>
1460There will be a "LOAD CLASS" tag for type type of each array
1461in the dump. In the LOAD CLASS record, the class name string ID
1462will refer to a string with a human-readable name of the array
1463type that is formatted as the type name would be in Java source
1464code. Thus, the LOAD CLASS record for the type char[] will
1465be "char[]", for short[][][] will be "short[][][]" and for
1466MyType[] will be "MyType[]".
1467<br>
1468<h3><a name="mozTocId348369" class="mozTocH3"></a>Socket Connection and
1469Communication</h3>
1470<br>
1471<span style="font-weight: bold;">WARNING</span>: This command format is
1472still
1473considered highly experimental, however, all attempts were made to
1474match the format of past HPROF implementations.<br>
1475<br>
1476<br>
1477Commands can be sent to HPROF via the socket connection, the accepted
1478COMMAND TAGS are:<br>
1479<br>
1480<table style="text-align: left; width: 100%;" border="1" cellpadding="2"
1481 cellspacing="2">
1482 <tbody>
1483 <tr>
1484 <td style="vertical-align: top;">FORCE GC (<span
1485 style="font-style: italic; color: rgb(255, 0, 0);">Not implemented</span>)<br>
1486 </td>
1487 <td style="vertical-align: top;">0x01<br>
1488 </td>
1489 </tr>
1490 <tr>
1491 <td style="vertical-align: top;">DUMP HEAP<br>
1492 </td>
1493 <td style="vertical-align: top;">0x02<br>
1494 </td>
1495 </tr>
1496 <tr>
1497 <td style="vertical-align: top;">ALLOC SITES<br>
1498 </td>
1499 <td style="vertical-align: top;">0x03<br>
1500 </td>
1501 </tr>
1502 <tr>
1503 <td style="vertical-align: top;">HEAP SUMMARY<br>
1504 </td>
1505 <td style="vertical-align: top;">0x04<br>
1506 </td>
1507 </tr>
1508 <tr>
1509 <td style="vertical-align: top;">EXIT THE VM<br>
1510 </td>
1511 <td style="vertical-align: top;">0x05<br>
1512 </td>
1513 </tr>
1514 <tr>
1515 <td style="vertical-align: top;">DUMP TRACES<br>
1516 </td>
1517 <td style="vertical-align: top;">0x06<br>
1518 </td>
1519 </tr>
1520 <tr>
1521 <td style="vertical-align: top;">CPU SAMPLES<br>
1522 </td>
1523 <td style="vertical-align: top;">0x07<br>
1524 </td>
1525 </tr>
1526 <tr>
1527 <td style="vertical-align: top;">CONTROL<br>
1528 </td>
1529 <td style="vertical-align: top;">0x08<br>
1530 </td>
1531 </tr>
1532 <tr>
1533 <td style="vertical-align: top;">EOF (used to terminate socket
1534connection)<br>
1535 </td>
1536 <td style="vertical-align: top;">0xFF<br>
1537 </td>
1538 </tr>
1539 </tbody>
1540</table>
1541<br>
1542The commands take the form:<br>
1543<br>
1544<table style="text-align: left; width: 100%;" border="1" cellpadding="2"
1545 cellspacing="2">
1546 <tbody>
1547 <tr>
1548 <td style="vertical-align: top;">u1<br>
1549 </td>
1550 <td style="vertical-align: top;">COMMAND TAG<br>
1551 </td>
1552 </tr>
1553 <tr>
1554 <td style="vertical-align: top;">u4<br>
1555 </td>
1556 <td style="vertical-align: top;">serial number<br>
1557 </td>
1558 </tr>
1559 <tr>
1560 <td style="vertical-align: top;">u4<br>
1561 </td>
1562 <td style="vertical-align: top;">number of bytes that follow<br>
1563 </td>
1564 </tr>
1565 <tr>
1566 <td style="vertical-align: top;">[u1]*<br>
1567 </td>
1568 <td style="vertical-align: top;">
1569 <table style="text-align: left; width: 100%;" border="1"
1570 cellpadding="2" cellspacing="2">
1571 <tbody>
1572 <tr>
1573 <td style="vertical-align: top;">ALLOC SITES<br>
1574 </td>
1575 <td style="vertical-align: top;">
1576 <table style="text-align: left; width: 100%;" border="1"
1577 cellpadding="2" cellspacing="2">
1578 <tbody>
1579 <tr>
1580 <td style="vertical-align: top;">u2<br>
1581 </td>
1582 <td style="vertical-align: top;">Flags:<br>
1583 </td>
1584 </tr>
1585 <tr>
1586 <td style="vertical-align: top;">u4<br>
1587 </td>
1588 <td style="vertical-align: top;">cutoff ratio
1589(floating point between 0.0 and 1.0)<br>
1590 </td>
1591 </tr>
1592 </tbody>
1593 </table>
1594 <br>
1595 </td>
1596 </tr>
1597 <tr>
1598 <td style="vertical-align: top;">CPU SAMPLES<br>
1599 </td>
1600 <td style="vertical-align: top;">
1601 <table style="text-align: left; width: 100%;" border="1"
1602 cellpadding="2" cellspacing="2">
1603 <tbody>
1604 <tr>
1605 <td style="vertical-align: top;">u2<br>
1606 </td>
1607 <td style="vertical-align: top;">ignored<br>
1608 </td>
1609 </tr>
1610 <tr>
1611 <td style="vertical-align: top;">u4<br>
1612 </td>
1613 <td style="vertical-align: top;">cutoff ratio
1614(floating point between 0.0 and 1.0)<br>
1615 </td>
1616 </tr>
1617 </tbody>
1618 </table>
1619 <br>
1620 </td>
1621 </tr>
1622 <tr>
1623 <td style="vertical-align: top;">CONTROL<br>
1624 </td>
1625 <td style="vertical-align: top;">
1626 <table style="text-align: left; width: 100%;" border="1"
1627 cellpadding="2" cellspacing="2">
1628 <tbody>
1629 <tr>
1630 <td style="vertical-align: top;">u2<br>
1631 </td>
1632 <td style="vertical-align: top;">Sub option:<br>
1633 <table style="text-align: left; width: 100%;"
1634 border="1" cellpadding="2" cellspacing="2">
1635 <tbody>
1636 <tr>
1637 <td style="vertical-align: top;">0x1<br>
1638 </td>
1639 <td style="vertical-align: top;">Turn alloc
1640traces on<br>
1641 </td>
1642 </tr>
1643 <tr>
1644 <td style="vertical-align: top;">0x2<br>
1645 </td>
1646 <td style="vertical-align: top;">Turn alloc
1647traces off<br>
1648 </td>
1649 </tr>
1650 <tr>
1651 <td style="vertical-align: top;">0x3<br>
1652 </td>
1653 <td style="vertical-align: top;">Turn CPU
1654sampling on:<br>
1655 <table style="text-align: left; width: 100%;"
1656 border="1" cellpadding="2" cellspacing="2">
1657 <tbody>
1658 <tr>
1659 <td style="vertical-align: top;">ID<br>
1660 </td>
1661 <td style="vertical-align: top;">thread
1662object ID (0 for all threads)<br>
1663 </td>
1664 </tr>
1665 </tbody>
1666 </table>
1667 <br>
1668 </td>
1669 </tr>
1670 <tr>
1671 <td style="vertical-align: top;">0x4<br>
1672 </td>
1673 <td style="vertical-align: top;">Turn CPU
1674sampling off:<br>
1675 <table style="text-align: left; width: 100%;"
1676 border="1" cellpadding="2" cellspacing="2">
1677 <tbody>
1678 <tr>
1679 <td style="vertical-align: top;">ID<br>
1680 </td>
1681 <td style="vertical-align: top;">thread
1682object ID (0 for all threads)</td>
1683 </tr>
1684 </tbody>
1685 </table>
1686 <br>
1687 </td>
1688 </tr>
1689 <tr>
1690 <td style="vertical-align: top;">0x5<br>
1691 </td>
1692 <td style="vertical-align: top;">Clear CPU
1693sampling<br>
1694 </td>
1695 </tr>
1696 <tr>
1697 <td style="vertical-align: top;">0x6<br>
1698 </td>
1699 <td style="vertical-align: top;">Set max stack
1700depth:<br>
1701 <table style="text-align: left; width: 100%;"
1702 border="1" cellpadding="2" cellspacing="2">
1703 <tbody>
1704 <tr>
1705 <td style="vertical-align: top;">u2<br>
1706 </td>
1707 <td style="vertical-align: top;">New max
1708stack depth<br>
1709 </td>
1710 </tr>
1711 </tbody>
1712 </table>
1713 <br>
1714 </td>
1715 </tr>
1716 </tbody>
1717 </table>
1718 <br>
1719 </td>
1720 </tr>
1721 </tbody>
1722 </table>
1723 <br>
1724 </td>
1725 </tr>
1726 </tbody>
1727 </table>
1728 </td>
1729 </tr>
1730 </tbody>
1731</table>
1732<br>
1733<p></p>
1734<h2><a name="mozTocId589424" class="mozTocH4"></a>Source Code<br>
1735</h2>
1736The source to HPROF is available in the JDK download in the
1737demo/jvmti/hprof directory.
1738<p><font size="-1"><b>*As used on this web site, the terms "Java
1739Virtual Machine" or "JVM" mean a virtual machine for the Java platform.</b></font>
1740</p>
1741<p></p>
1742<hr><!-- hhmts start -->
1743Last modified: 2005<!-- hhmts end -->
1744</body>
1745</html>