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
situation in the native code itself, even if no Java™ code was ever run on the primordial
thread.
Another point to consider is the effect of maxssiz on the overall amount of writeable
data space available to the application. The kernel automatically protects some memory
above maxssiz away from the primordial stack base to enforce the maxssiz limit. If the
maxssiz is very large, this space between the base and the protected stack top is
permanently reserved for potential stack space, and it is not available for any other
writeable data use such as C heap, Java™ heap, or other thread stacks. Therefore if you
need to have the maximum amount of writeable data space available to your application,
you may want to consider reducing the maxssiz. Remember, though, that maxssiz affects
all applications running on the system.
Example
Consider the following example. An application calls JNI_CreateJavaVM from the
primordial thread, which installs a stack overflow check at more or less 2MB above the
JNI_CreateJavaVM frame. The application then makes function calls via recursion
or otherwise that result in a very deep stack on the same thread independent of calling
back into Java™. The stack usage could cross the JVM-imposed primordial thread stack
size limit of 2M and cause a stack overflow situation in the native code itself. In this
case the JVM cannot take any action to resolve the problem, and the process aborts
with the message:
"An irrecoverable stack overflow has occurred."
You need to distinguish stack overflow failures in the primordial thread from those
occurring in other threads. If the overflow is in a Java™ thread, the error log generated
will report the current Java™ thread, which can be used to identify the thread that
caused the stack overflow failure. In the JVM diagnostic output, you would see a
message like this:
An irrecoverable stack overflow has occurred.
An unexpected exception has been detected in native code outside the VM.Unexpected Signal : 10
occurred at PC=0x2D10
Function=__d_trap
Library=./crjvmzon
Current Java™ thread:
"main" prio=7 tid=4000a1b8 nid=1 lwp_id=127233 runnable [0x00000000..0x6fff0b08]
Dynamic libraries:
./crjvmzon
text:0x00001000-0x00003db4 data:0x40001000-0x400014b4
/opt/java1.4/jre/lib/PA_RISC2.0/server/libjvm.sl
text:0xc2000000-0xc2c67000 data:0x6fe0b000-0x6ffab000
[...]
Above, you can see that the error happened on the "main" thread, that is, the one that
called JNI_CreateJavaVM.
Workarounds
Here are three suggestions to work around a stack overflow problem in the main thread,
listed from most desirable to least.
58 Using Java™ 2 JNI on HP-UX