<
pre>java -agentlib:hprof=help<
br><
br> HPROF: Heap and CPU Profiling Agent (JVMTI Demonstration Code)<
br><
br>hprof usage: java -agentlib:hprof=[help]|[<option>=<value>, ...]<
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=<file> write data to file
java.hprof[{.txt}]<
br>net=<host>:<port> send data over a socket off<
br>depth=<size> stack trace depth 4<
br>interval=<ms> sample interval in ms 10<
br>cutoff=<value> 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 <file> 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]|[<option>=<value>, ...]<
br> will behave exactly the same as:<
br> java -agentlib:hprof=[help]|[<option>=<value>, ...]<
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>
<
p>By default, heap profiling information (sites and dump) is written
The monitor=y|n option has proven to be problematic and may be replaced
with something more useful.<
br>
<
p>The output in most cases will contain ID's for traces, threads,
objects, etc. Each type of ID will typically start with a
different number than the other ID's,
e.g. traces might start with
<
p><
span style="font-weight: bold;">Note</
span>: <
span style="font-style: italic; color: rgb(255, 0, 0);">The gc_okay option
is no longer supported.</
span><
br>
<
h2><
a name="mozTocId708821" class="mozTocH4"></
a>Heap Allocation
Profiles (heap=sites)<
br>
Following is the heap allocation profile generated by running the Java
(<
code>javac</
code>) on a set of input files. Only parts of the
profiler output are shown here.
<
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>
A crucial piece of information in heap profile is the amount of
in various parts of the program. The <
code>SITES</
code> record above
tells us that 44.13% of the total space was allocated for
of the total allocation that has occurred at a given site; the rest has
<
p>A good way to relate allocation sites to the source code is to
the dynamic stack traces that led to the heap allocation. Following is
another part of the profiler output that illustrates the stack traces
referred to by the four allocation sites in output shown above.
<
span style="font-family: monospace;"><
br>
<
blockquote></
blockquote>
Each frame in the stack trace contains class name, method name, source
file name, and the line number. The user can set the maximum number
of frames collected by the HPROF agent. The default limit is 4. Stack
traces reveal not only which methods performed heap allocation, but
also which methods were ultimately responsible for making calls that
resulted in memory allocation. <
br>
<
h2><
a name="mozTocId634725" class="mozTocH2"></
a>Heap Dump (heap=dump)</
h2>
A complete dump of the current live objects in the heap can be obtained
<
pre>Command used: javac -J-agentlib:hprof=heap=dump
Hello.java<
br></
pre>
This is a very large output file, but can be viewed and searched in any
<
h2><
a name="mozTocId546448" class="mozTocH4"></
a>CPU Usage Sampling
Profiles (cpu=samples)<
br>
HPROF can collect CPU usage information by sampling threads. Following
is part of the output collected from a run
of the <
code>javac</
code> compiler.
The HPROF agent periodically samples the stack of all running threads
to record the most frequently active stack traces. The <
code>count</
code>
field above indicates how many times a particular stack trace was found
to be active. These stack traces correspond to the CPU usage hot spots
<
h2><
a name="mozTocId116568" class="mozTocH2"></
a>CPU Usage Times
HPROF can collect CPU usage information by injecting code into every
method entry and exit, keeping track of exact method call counts and
the time spent in each method. This uses Byte Code Injection (BCI) and
runs considerably slower than cpu=samples. Following is part of the
output collected from a run
of the <
code>javac</
code> compiler.
Here the count represents the true count of the times this method was
entered, and the percentages represent a measure of thread CPU time
spent in those methods.<
br>
<
h2><
a class="mozTocH3" name="mozTocId848088"></
a>Binary Dump Format
The basic fields in the binary output are u1 (1 byte), u2 (2 byte), u4
(4 byte), and u8 (8 byte). An ID in this implementation is a u4,
however the size of an ID is really determined by the "size of
identifiers" field in the header.<
br>
<
span style="font-weight: bold;">WARNING</
span>: This format is still
considered highly experimental, however, all attempts were made to
match the format of past HPROF implementations.<
br>
The binary output begins with the information:<
br>
<
table style="text-align: left; width: 100%; height: 124px;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">[u1]*<
br>
<
td style="vertical-align: top;">An initial NULL terminated
series of bytes representing the format name and version, in this
implementation and historically, the string "JAVA PROFILE 1.0.1" (18
u1 bytes) followed by a NULL byte. If the TAG "HEAP DUMP SEGMENT" is
used this string will be "JAVA PROFILE 1.0.2". </
td>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">size of identifiers. Identifiers
are used to represent UTF8 strings, objects, stack traces, etc. They
can have the same size as host pointers or sizeof(void*), but are not
required to be.<
span style="color: rgb(0, 0, 0);"></
span></
td>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">high word of number of
milliseconds since 0:00 GMT,
1/
1/
70</
td>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">low word of number of
milliseconds since 0:00 GMT,
1/
1/
70</
td>
Followed by a se<
span style="font-family: monospace;"></
span>quence of
records that look like:<
br>
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" <
td style="vertical-align: top;">u1<
br>
<
td style="vertical-align: top;">TAG: denoting the type of the
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">TIME: number of microseconds
time stamp in the header<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">LENGTH: number of bytes that
u4 field and belong to this record<
br>
<
td style="vertical-align: top;">[u1]*<
br>
<
td style="vertical-align: top;">BODY: as many bytes as specified
The following TAGs are supported:<
br>
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" <
td style="vertical-align: top;">STRING IN UTF8<
br>
<
td style="vertical-align: top;">0x01<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">ID for this string<
br>
<
td style="vertical-align: top;">[u1]*<
br>
<
td style="vertical-align: top;">UTF8 characters for string
(NOT NULL terminated)<
br>
<
td style="vertical-align: top;">LOAD CLASS<
br>
<
td style="vertical-align: top;">0x02<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">class serial number
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">class object ID<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">stack trace serial number<
br>
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">class name string ID<
br>
<
td style="vertical-align: top;">UNLOAD CLASS<
br>
<
td style="vertical-align: top;">0x03<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">class serial number<
br>
<
td style="vertical-align: top;">STACK FRAME<
br>
<
td style="vertical-align: top;">0x04<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">stack frame ID<
br>
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">method name string ID<
br>
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">method signature string ID<
br>
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">source file name string ID<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">class serial number<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">> 0<
br>
<
td style="vertical-align: top;">line number<
br>
<
td style="vertical-align: top;">0<
br>
<
td style="vertical-align: top;">no line information
<
td style="vertical-align: top;">-1<
br>
<
td style="vertical-align: top;">unknown location<
br>
<
td style="vertical-align: top;">-2<
br>
<
td style="vertical-align: top;">compiled method (<
span style="font-style: italic; color: rgb(255, 0, 0);">Not implemented</
span>)<
br>
<
td style="vertical-align: top;">-3<
br>
<
td style="vertical-align: top;">native method (<
span style="color: rgb(255, 0, 0); font-style: italic;">Not implemented</
span>)<
br>
<
td style="vertical-align: top;">STACK TRACE<
br>
<
td style="vertical-align: top;">0x05<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">stack trace serial number<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">thread serial number<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">number of frames<
br>
<
td style="vertical-align: top;">[ID]*<
br>
<
td style="vertical-align: top;">series of stack frame ID's<
br>
<
td style="vertical-align: top;">ALLOC SITES<
br>
<
td style="vertical-align: top;">0x06<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u2<
br>
<
td style="vertical-align: top;">Bit mask flags:<
br>
<
table style="text-align: left; width: 441px; height: 74px;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">0x1<
br>
<
td style="vertical-align: top;">incremental vs.
<
td style="vertical-align: top;">0x2<
br>
<
td style="vertical-align: top; text-align: left;">sorted
by allocation vs. line<
br>
<
td style="vertical-align: top;">0x4<
br>
<
td style="vertical-align: top;">whether to force GC
(<
span style="font-style: italic; color: rgb(255, 0, 0);">Not
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">cutoff ratio (floating
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">total live bytes<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">total live instances<
br>
<
td style="vertical-align: top;">u8<
br>
<
td style="vertical-align: top;">total bytes allocated<
br>
<
td style="vertical-align: top;">u8<
br>
<
td style="vertical-align: top;">total instances allocated<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">number of sites that
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u1<
br>
<
td style="vertical-align: top;">array indicator: 0
means not an array, non-zero means an array of this type (See <
a href="#Basic_Type">Basic Type</
a>)<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">class serial number<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">stack trace serial
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">number of live bytes<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">number of live
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">number of bytes
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">number of instances
<
td style="vertical-align: top;">HEAP SUMMARY<
br>
<
td style="vertical-align: top;">0x07<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">total live bytes<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">total live instances<
br>
<
td style="vertical-align: top;">u8<
br>
<
td style="vertical-align: top;">total bytes allocated<
br>
<
td style="vertical-align: top;">u8<
br>
<
td style="vertical-align: top;">total instances allocated<
br>
<
td style="vertical-align: top;">START THREAD<
br>
<
td style="vertical-align: top;">0x0A<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">thread serial number<
br>
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">thread object ID<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">stack trace serial number<
br>
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">thread name string ID<
br>
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">thread group name ID<
br>
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">thread parent group name ID<
br>
<
td style="vertical-align: top;">END THREAD<
br>
<
td style="vertical-align: top;">0x0B<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">thread serial number<
br>
<
td style="vertical-align: top;">HEAP DUMP<
br>
<
span style="font-style: italic;">or</
span><
br>
<
td style="vertical-align: top;">0x0C<
br>
<
span style="font-style: italic;">or</
span><
br>
<
td style="vertical-align: top;">Contains any number of sub-tags,
each begins a u1 field (no order implied here):<
br>
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ROOT UNKNOWN<
br>
<
td style="vertical-align: top;">0xFF<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">object ID<
br>
<
td style="vertical-align: top;">ROOT JNI GLOBAL<
br>
<
td style="vertical-align: top;">0x01<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">object ID<
br>
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">JNI global ref ID<
br>
<
td style="vertical-align: top;">ROOT JNI LOCAL<
br>
<
td style="vertical-align: top;">0x02<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">object ID<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">thread serial number<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">frame number in
stack trace (-1 for empty)<
br>
<
td style="vertical-align: top;">ROOT JAVA FRAME<
br>
<
td style="vertical-align: top;">0x03<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">object ID<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">thread serial number<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">frame number in
stack trace (-1 for empty)</
td>
<
td style="vertical-align: top;">ROOT NATIVE STACK<
br>
<
td style="vertical-align: top;">0x04<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">object ID<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">thread serial number<
br>
<
td style="vertical-align: top;">ROOT STICKY CLASS<
br>
<
td style="vertical-align: top;">0x05<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">object ID<
br>
<
td style="vertical-align: top;">ROOT THREAD BLOCK<
br>
<
td style="vertical-align: top;">0x06<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">object ID<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">thread serial number<
br>
<
td style="vertical-align: top;">ROOT MONITOR USED<
br>
<
td style="vertical-align: top;">0x07<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">object ID<
br>
<
td style="vertical-align: top;">ROOT THREAD OBJECT<
br>
<
td style="vertical-align: top;">0x08<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">thread object ID<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">thread serial number<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">stack trace serial
<
td style="vertical-align: top;">CLASS DUMP<
br>
<
td style="vertical-align: top;">0x20<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">class object ID<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">stack trace serial
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">super class object ID<
br>
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">class loader object
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">signers object ID<
br>
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">protection domain
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">reserved<
br>
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">reserved<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">instance size (in
<
td style="vertical-align: top;">u2<
br>
<
td style="vertical-align: top;">size of constant
pool and number of records that follow:<
br>
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u2<
br>
<
td style="vertical-align: top;">constant pool
<
td style="vertical-align: top;">u1<
br>
<
td style="vertical-align: top;">type of entry:
(See <
a href="#Basic_Type">Basic Type</
a>)<
br>
<
td style="vertical-align: top;">value<
br>
<
td style="vertical-align: top;">value of entry
(u1, u2, u4, or u8 based on type of entry)<
span style="font-style: italic; color: rgb(255, 0, 0);"></
span><
br>
<
td style="vertical-align: top;">u2<
br>
<
td style="vertical-align: top;">Number of static
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">static field
<
td style="vertical-align: top;">u1<
br>
<
td style="vertical-align: top;">type of field:
(See <
a href="#Basic_Type">Basic Type</
a>)<
br>
<
td style="vertical-align: top;">value<
br>
<
td style="vertical-align: top;">value of entry
(u1, u2, u4, or u8 based on type of field) <
span style="font-style: italic; color: rgb(255, 0, 0);"></
span><
br>
<
td style="vertical-align: top;">u2<
br>
<
td style="vertical-align: top;">Number of instance
fields (not including super class's)<
br>
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">field name
<
td style="vertical-align: top;">u1<
br>
<
td style="vertical-align: top;">type of field:
(See <
a href="#Basic_Type">Basic Type</
a>)<
br>
<
td style="vertical-align: top;">INSTANCE DUMP<
br>
<
td style="vertical-align: top;">0x21<
br>
<
td style="vertical-align: top;"><
br>
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">object ID<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">stack trace serial
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">class object ID<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">number of bytes that
<
td style="vertical-align: top;">[value]*<
br>
<
td style="vertical-align: top;">instance field
values (this class, followed by super class, etc)<
span style="font-style: italic; color: rgb(255, 0, 0);"></
span><
br>
<
td style="vertical-align: top;">OBJECT ARRAY DUMP<
br>
<
td style="vertical-align: top;">0x22<
br>
<
td style="vertical-align: top;"><
br>
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">array object ID<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">stack trace serial
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">number of elements<
br>
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">array class object
<
td style="vertical-align: top;">[ID]*<
br>
<
td style="vertical-align: top;">elements<
br>
<
td style="vertical-align: top;">PRIMITIVE ARRAY DUMP<
br>
<
td style="vertical-align: top;">0x23<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">array object ID<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">stack trace serial
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">number of elements<
br>
<
td style="vertical-align: top;">u1<
br>
<
td style="vertical-align: top;">element type (See <
a href="#Basic_Type">Basic Type</
a>)<
br>
<
td style="vertical-align: top;">[u1]*<
br>
<
td style="vertical-align: top;">elements (packed
<
td style="vertical-align: top;">HEAP DUMP END<
br>
<
td style="vertical-align: top;">0x2C<
br>
<
td style="vertical-align: top;">Terminates a series of HEAP DUMP
SEGMENTS. Concatenation of HEAP DUMP SEGMENTS equals a HEAP DUMP.<
br>
<
td style="vertical-align: top;">CPU SAMPLES<
br>
<
td style="vertical-align: top;">0x0D<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">total number of samples<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">number of traces that
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">number of samples<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">stack trace serial
<
td style="vertical-align: top;">CONTROL SETTINGS<
br>
<
td style="vertical-align: top;">0x0E<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">Bit mask flags:<
br>
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">0x1<
br>
<
td style="vertical-align: top;">alloc traces
on/
off<
br>
<
td style="vertical-align: top;">0x2<
br>
<
td style="vertical-align: top;">cpu sampling
on/
off<
br>
<
td style="vertical-align: top;">u2<
br>
<
td style="vertical-align: top;">stack trace depth<
br>
<
span style="font-weight: bold;"><
br>
</
span><
a name="Basic_Type"></
a>Basic Type
<
table style="text-align: left; width: 296px; height: 221px;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">2<
br>
<
td style="vertical-align: top;">object<
br>
<
td style="vertical-align: top;">4<
br>
<
td style="vertical-align: top;">boolean<
br>
<
td style="vertical-align: top;">5<
br>
<
td style="vertical-align: top;">char<
br>
<
td style="vertical-align: top;">6<
br>
<
td style="vertical-align: top;">float<
br>
<
td style="vertical-align: top;">7<
br>
<
td style="vertical-align: top;">double<
br>
<
td style="vertical-align: top;">8<
br>
<
td style="vertical-align: top;">byte<
br>
<
td style="vertical-align: top;">9<
br>
<
td style="vertical-align: top;">short<
br>
<
td style="vertical-align: top;">10<
br>
<
td style="vertical-align: top;">int<
br>
<
td style="vertical-align: top;">11<
br>
<
td style="vertical-align: top;">long<
br>
<
h3><
a name="mozTocId348360" class="mozTocH3"></
a>Handling of Arrays</
h3>
There will be a "LOAD CLASS" tag for type type of each array
in the dump. In the LOAD CLASS record, the class name string ID
will refer to a string with a human-readable name of the array
type that is formatted as the type name would be in Java source
code. Thus, the LOAD CLASS record for the type char[] will
be "char[]", for short[][][] will be "short[][][]" and for
MyType[] will be "MyType[]".
<
h3><
a name="mozTocId348369" class="mozTocH3"></
a>Socket Connection and
<
span style="font-weight: bold;">WARNING</
span>: This command format is
considered highly experimental, however, all attempts were made to
match the format of past HPROF implementations.<
br>
Commands can be sent to HPROF via the socket connection, the accepted
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" <
td style="vertical-align: top;">FORCE GC (<
span style="font-style: italic; color: rgb(255, 0, 0);">Not implemented</
span>)<
br>
<
td style="vertical-align: top;">0x01<
br>
<
td style="vertical-align: top;">DUMP HEAP<
br>
<
td style="vertical-align: top;">0x02<
br>
<
td style="vertical-align: top;">ALLOC SITES<
br>
<
td style="vertical-align: top;">0x03<
br>
<
td style="vertical-align: top;">HEAP SUMMARY<
br>
<
td style="vertical-align: top;">0x04<
br>
<
td style="vertical-align: top;">EXIT THE VM<
br>
<
td style="vertical-align: top;">0x05<
br>
<
td style="vertical-align: top;">DUMP TRACES<
br>
<
td style="vertical-align: top;">0x06<
br>
<
td style="vertical-align: top;">CPU SAMPLES<
br>
<
td style="vertical-align: top;">0x07<
br>
<
td style="vertical-align: top;">CONTROL<
br>
<
td style="vertical-align: top;">0x08<
br>
<
td style="vertical-align: top;">EOF (used to terminate socket
<
td style="vertical-align: top;">0xFF<
br>
The commands take the form:<
br>
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" <
td style="vertical-align: top;">u1<
br>
<
td style="vertical-align: top;">COMMAND TAG<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">serial number<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">number of bytes that follow<
br>
<
td style="vertical-align: top;">[u1]*<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ALLOC SITES<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u2<
br>
<
td style="vertical-align: top;">Flags:<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">cutoff ratio
(floating point between 0.0 and 1.0)<
br>
<
td style="vertical-align: top;">CPU SAMPLES<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u2<
br>
<
td style="vertical-align: top;">ignored<
br>
<
td style="vertical-align: top;">u4<
br>
<
td style="vertical-align: top;">cutoff ratio
(floating point between 0.0 and 1.0)<
br>
<
td style="vertical-align: top;">CONTROL<
br>
<
td style="vertical-align: top;">
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u2<
br>
<
td style="vertical-align: top;">Sub option:<
br>
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">0x1<
br>
<
td style="vertical-align: top;">Turn alloc
<
td style="vertical-align: top;">0x2<
br>
<
td style="vertical-align: top;">Turn alloc
<
td style="vertical-align: top;">0x3<
br>
<
td style="vertical-align: top;">Turn CPU
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">thread
object ID (0 for all threads)<
br>
<
td style="vertical-align: top;">0x4<
br>
<
td style="vertical-align: top;">Turn CPU
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">ID<
br>
<
td style="vertical-align: top;">thread
object ID (0 for all threads)</
td>
<
td style="vertical-align: top;">0x5<
br>
<
td style="vertical-align: top;">Clear CPU
<
td style="vertical-align: top;">0x6<
br>
<
td style="vertical-align: top;">Set max stack
<
table style="text-align: left; width: 100%;" border="1" cellpadding="2" cellspacing="2">
<
td style="vertical-align: top;">u2<
br>
<
td style="vertical-align: top;">New max
<
h2><
a name="mozTocId589424" class="mozTocH4"></
a>Source Code<
br>
The source to HPROF is available in the JDK download in the
<
p><
font size="-1"><
b>*As used on this web site, the terms "Java
Virtual Machine" or "JVM" mean a virtual machine for the Java platform.</
b></
font>
Last modified: 2005
<!-- hhmts end -->