." Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
."
." This code is free software; you can redistribute it and/or modify it
." under the terms of the GNU General Public License version 2 only, as
." published by the Free Software Foundation.
."
." This code is distributed in the hope that it will be useful, but WITHOUT
." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
." FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
." version 2 for more details (a copy is included in the LICENSE file that
." accompanied this code).
."
." You should have received a copy of the GNU General Public License version
." 2 along with this work; if not, write to the Free Software Foundation,
." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
."
." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
." or visit www.oracle.com if you need additional information or have any
." questions.
."
.TH jmap 1 "04 May 2009"
." Generated from HTML by html2man (author: Eric Armstrong)

.LP
.SH "Name"
jmap \- Memory Map
.LP
.SH "SYNOPSIS"
.LP

.LP
.nf
\f3
.fl
\fP\f3jmap\fP [ option ] pid
.fl
\f3jmap\fP [ option ] executable core
.fl
\f3jmap\fP [ option ] [server\-id@]remote\-hostname\-or\-IP
.fl
.fi

.LP
.SH "PARAMETERS"
.LP

.LP
.RS 3
.TP 3
option 
Options are mutually exclusive. Option, if used, should follow immediately after the command name. 
.TP 3
pid 
process id for which the memory map is to be printed. The process must be a Java process. To get a list of Java processes running on a machine, jps(1) may be used. 
.br
.TP 3
executable 
Java executable from which the core dump was produced. 
.br
.TP 3
core 
core file for which the memory map is to be printed. 
.br
.TP 3
remote\-hostname\-or\-IP 
remote debug server's (see jsadebugd(1)) hostname or IP address. 
.br
.TP 3
server\-id 
optional unique id, if multiple debug servers are running on the same remote host.
.br
.RE

.LP
.SH "DESCRIPTION"
.LP

.LP
.LP
\f3jmap\fP prints shared object memory maps or heap memory details of a given process or core file or a remote debug server. If the given process is running on a 64\-bit VM, you may need to specify the \f2\-J\-d64\fP option, e.g.:
.LP
.RS 3

.LP
.nf
\f3
.fl
jmap \-J\-d64 \-heap pid
.fl
\fP
.fi
.RE

.LP
\f3NOTE \- This utility is unsupported and may or may not be available in future versions of the JDK. In Windows Systems where dbgeng.dll is not present, 'Debugging Tools For Windows' needs to be installed to have these tools working. Also, \fP\f4PATH\fP\f3 environment variable should contain the location of \fP\f4jvm.dll\fP\f3 used by the target process or the location from which the Crash Dump file was produced.\fP 
.LP
\f3For example, \fP\f4set PATH=<jdk>\\jre\\bin\\client;%PATH%\fP
.LP
.br

.LP
.SH "OPTIONS"
.LP

.LP
.RS 3
.TP 3
<no option> 
When no option is used \f3jmap\fP prints shared object mappings. For each shared object loaded in the target VM, start address, the size of the mapping, and the full path of the shared object file are printed. This is similar to the Solaris \f3pmap\fP utility. 
.br
.TP 3
\-dump:[live,]format=b,file=<filename> 
Dumps the Java heap in hprof binary format to filename. The \f2live\fP suboption is optional. If specified, only the live objects in the heap are dumped. To browse the heap dump, you can use jhat(1) (Java Heap Analysis Tool) to read the generated file. 
.br
.TP 3
\-finalizerinfo 
Prints information on objects awaiting finalization. 
.br
.TP 3
\-heap 
Prints a heap summary. GC algorithm used, heap configuration and generation wise heap usage are printed. 
.br
.TP 3
\-histo[:live] 
Prints a histogram of the heap. For each Java class, number of objects, memory size in bytes, and fully qualified class names are printed. VM internal class names are printed with '*' prefix. If the \f2live\fP suboption is specified, only live objects are counted. 
.br
.TP 3
\-permstat 
Prints class loader wise statistics of permanent generation of Java heap. For each class loader, its name, liveness, address, parent class loader, and the number and size of classes it has loaded are printed. In addition, the number and size of interned Strings are printed. 
.br
.TP 3
\-F 
Force. Use with jmap \-dump or jmap \-histo option if the pid does not respond. The \f2live\fP suboption is not supported in this mode. 
.br
.TP 3
\-h 
Prints a help message.
.br
.br
.TP 3
\-help 
Prints a help message.
.br
.br
.TP 3
\-J<flag> 
Passes <flag> to the Java virtual machine on which jmap is run. 
.br
.RE

.LP
.SH "SEE ALSO"
.LP
.RS 3
.TP 2
o
pmap(1) 
.TP 2
o
jhat(1) 
.TP 2
o
jps(1) 
.TP 2
o
jsadebugd(1) 
.RE

.LP

.LP
 
