HP-UX Programmer's Guide for Java 2
Table Of Contents
- Table of Contents
- 1 Introduction
- 2 HotSpot Technology Tools and Commands
- 3 Configuration for Java™ Support
- 4 Performance and Tuning
- 5 Measuring System Performance
- 6 Using Threads
- 7 Using Signals
- 8 Using Java™ 2 JNI on HP-UX
- 9 Expanding Memory
- Determine your requirements
- Memory layout under HP-UX 11.0 (PA-RISC only)
- Additional memory available under HP-UX 11i (PA-RISC only)
- Allocating physical memory and swap in the Java™ heap
- Useful key command-line options for allocating memory
- Application-dependent considerations using large heap size HP-UX 11i PA-RISC
- Expanding heap size in native applications on PA-RISC HP-UX 11.11 and later releases
- Expanding heap size in native applications on Integrity HP-UX 11.23 and later releases
- Expanding heap size in HP-UX PA-RISC
- Expanding heap size in HP-UX Integrity
- 10 Diagnosing Memory Leaks
- A JDK/JRE 6.0.n and 7.0.n Usage Notes
- Using Java 2 JNI on HP-UX
- Garbage collection
- Asian TrueType fonts and Asian locales
- Date/Time methods defaults
- Profiling
- Compatibility with previous releases
- Java Cryptography Extension (JCE) policy files
- Configuring the Java Runtime Plug-In
- CLASSPATH environment variable
- Java Web Start technology usage
- Upgrading from a previous Java Web Start version
- IPv6 support
- Allocation Site Statistics and Zero Preparation -Xverbosegc
- JDK 6.0.04 flags
- GC log-rotation support
- NUMA collector enhancements
- ThreadDumpPath support
- Garbage-First garbage collector (-XX:+UseG1GC)
- jmap, jinfo, and jstack tools included in JDK 6.0.03
- Additional Java Web Start documentation
- B JDK/JRE 5.0.n Usage Notes
- Using Java 2 JNI on HP-UX
- Garbage collectors: Parallel and Concurrent Mark Sweep
- Allocating physical memory and swap in the Java heap
- Asian TrueType fonts and Asian locales
- Date/Time methods defaults
- Profiling
- Closing a socket (PA-RISC only)
- Compatibility with previous releases
- Java Cryptography Extension (JCE) policy files
- Allocation Site Statistics and Zero Preparation -Xverbosegc
- IPv6 support on Java 5.0
- GC log-rotation support in 5.0
- ThreadDumpPath support in 5.0
- Dynamically loaded libraries in 5.0
- Performance improvement for String.intern()
- Configuring the Java Runtime Plug-In
- CLASSPATH environment variable
- Java Web Start technology usage
- C SDK/RTE 1.4.2.n Usage Notes
- Removing support for unwanted architectures in the JRE
- Support for dynamic thread local storage (TLS)
- Signal Chaining functionality
- Using Java 2 JNI on HP-UX
- HotSpot JVM options
- Garbage collectors: Parallel and Concurrent mark sweep
- Allocating physical memory and swap in the Java heap
- Asian TrueType fonts and Asian locales
- Date/Time methods defaults
- Profiling
- Closing a socket when accept or read is pending (PA-RISC) - new patch information!
- Compatibility with previous releases
- Runtime Plug-In usage and configuration
- GC log-rotation support
- ThreadDumpPath support
- D Additional Resources
- Index

Currently, the first two cases require a command line like the following:
java -Xdebug -Xnoagent
-Djava.compiler=NONE-Xrunjdwp:transport=dt_socket,server=y,suspend=y-classpath
class-path class-name
The -Xdebug option enables debugging. The -Xnoagent option disables the default
sun.tools.debug debug Agent. The -Djava.compiler=NONE option disables the
JIT compiler.
For the third case, you must use the same command-line options as described above,
but you are free to use your own mechanism for loading the JVMDI client into the
application VM. You do not need to use -Xrun.
The Connection and Invocation Details document at http://download.oracle.com/javase/
1.4.2/docs/guide/jpda/conninv.html or http://download.oracle.com/javase/1.5.0/docs/
guide/jpda/conninv.html contains more information on necessary VM invocation
options and sub-options of -Xrunjdwp.
For more information on JPDA, see Java Platform Debugger Architecture.
Diagnosing memory leaks
Java™ applications may be susceptible to two kinds of memory leaks, those in the
Java™ heap or in the C heap. If you see a java.lang.OutOfMemoryError, the
exception text may be helpful in determining what is happening, but not always. You
may find it helpful to read about the java memory layout to get an overall understanding
of application memory.
First of all, let your application run long enough to get to a steady state under a
representative workload. With the HotSpot JVM, it often takes about 10 minutes under
load for the runtime to get warmed up for maximum performance, so you should wait
at least this long before measuring anything. To determine if the leak is in the Java™
heap, first run your application with the extra option:
-Xverbosegc:file=<name>
This writes garbage collection and heap size statistics to the file. View this file and if
you find the the old space continuously grows, you can suspect a Java™ heap leak.
Next run the application with:
-classic -Xrunhprof:heap=dump
You must use a heap size of around 256 to 384MB in order for the dump to be written
correctly, but the data is perfectly valid and the information applies equally to running
under HotSpot. The algorithm for the heap dump requires it to mmap() a new region
almost as big as the heap itself to process the data. The classic JVM only can support
1GB of total writable data, so you have to keep the heap small enough to fit two of
them in there, and leave some extra space for the C heap.
When you exit the process gracefully at the end of the run, the heap contents are written
to the file java.hprof.txt. You can view this file with HPjmeter.
72 Diagnosing Memory Leaks