HP-UX Java™ SDK Version 1.3.1.01 Release Notes


» Back to HP-UX Java™ Archived Releases – Release Notes

These Release Notes are provided on the software and as a standalone file on this website. The website version has the most up-to-date information.

The HP-UX SDK, for the Java™ 2 Platform Version 1.3 release provides the tools for developing and deploying Java applications on PA-8600-based workstations, HP server series rp5400, rp7400, and rp8400, and Superdome, with HP-UX 11.0 PA-RISC and 11i PA-RISC.

table of contents

features

installation

usage documentation

problem fixes and known issues

features

version numbering

Starting with HotSpot 1.3.1, HP uses the same version numbering scheme for HotSpot as for the SDK, following JavaSoft's convention.

HotSpot version 1.3.1 server JVM

This SDK 1.3.1 release includes the next generation HotSpot 1.3.1 server JVM (the default) and the Classic VM. See the note above on version numbering. The HotSpot 1.3.1 Server JVM for HP-UX 11.0 and 11i is suitable for both client and server workloads. We invoke the Server VM with configuration options that suit client-side applications. All the -X options that were in HotSpot 1.0.1 are included in HotSpot 1.3.1.

The HotSpot 1.3.1 Server JVM provides a number of improvements over the existing HotSpot 1.01 and Classic runtime environments:

  • improved performance
  • full implementation of Java VM Debugging Interface (JVMDI)
  • support for Java VM Profiling Interface (JVMPI)
  • support for the -Xeprof option for HPjmeter
  • introduces a new option, -Xrs, which reduces the use of operating system signals by the Java Virtual Machine
  • 3 GB heap size
  • Full implementation of JVMDI and JPDA allows you to run HotSpot instead of Classic when using the 1.3 SDK with numerous tools such as TogetherSoft Control Center, Code Warrior, Oracle JDeveloper, IBM Visual Age, Netbeans, JDE, MetaMata, Tek. Tools, Elixier IDE, BlueJ, JIG, JSwat Project, Swing Debugger, and the sample debugger jdb that ships with SDK 1.3.

    Support for JVMPI means that it is possible to profile java code with the HotSpot 1.3.1 VM. Therefore, you can extract more accurate runtime profiles. Some of the tools based on JVMPI include: hprof (-Xrunhprof), JProbe, JUM, and OptimizeIt. (Note: Although -hprof provides some stack trace information not found in -Xeprof, the latter can sometimes be more useful for performance tuning.)

    The -client option selects the HotSpot Client VM. In this release, we do not use the Client VM. Instead, we invoke the Server VM with configuration options that suit client-side applications.

    The -Xrs option is fully documented at: http://java.sun.com/j2se/1.3/docs/tooldocs/solaris/java.html

    The SDK version 1.3.1 contains defect fixes and numerous enhancements. These are documented at: http://developer.java.sun.com/developer/earlyAccess/j2sdk131/relnotes.html

    previous 1.3 releases

    The HP-UX SDK, for the Java 2 Platform, HotSpot 1.01 Edition included all of the standard Java 2 SDK Tools. The tools include appletviewer (with a graphical user interface), extcheck, jar, java, javac, javadoc, javah, javap, jdb and oldjdb (only for -classic mode), rmic, rmid, rmiregistry, serialver, keytool, jarsigner, policytool, native2ascii, tnameserv, and idlj. This release also continued to support a 100% Java compatible environment.

    The HP-UX SDK HotSpot 1.01 Edition version 1.3.0.00 included the new features of the standard version 1.3 of the Java 2 platform. The 1.3.0.01 version was a maintenance release that contained defect fixes.

    The performance, tool support, and tool enhancements are documented at http://java.sun.com/products/jdk/1.3/docs/relnotes/features.html. The complete list of features of the standard version 1.3 is documented at http://java.sun.com/reference/docs/index.html#guide.

    The 1.3.0 release contained the -Xnocatch option which disables the Java "catch-all" signal handler. Use this option to generate clean stack traces from native code.

    The 1.3.0 release also contained the FastSwing feature that is exclusive to HP-UX. This feature provides significant performance improvement for Swing Applications on a Remote X-Server. Remote X-Servers include X-Terminals, PC-XServers like Exceed and Reflection X and remote UNIX workstations. This feature is documented in "Usage Documentation" below.

    JPDA is the debugging support architecture needed to build debugger applications for the Java 2 Platform. With the SDK version 1.3.1.01, the JPDA supports both HotSpot and Classic VMs. The JPDA includes the Java Debug Interface (JDI), the Java Debug Wire Protocol (JDWP), and Java Virtual Machine Debug Interface (JVMDI). A sample debugger based on JPDA is provided in /opt/java1.3.1/bin/jdb. The original jdb product has been moved to /opt/java1.3.1/bin/oldjdb. Please note that the java source code for the sample debuggers is located in examples.jar in /opt/java1.3.1/demo/jpda and is unsupported.

    The HP-UX SDK, for the Java 2 Platform, HotSpot Edition supports the APIs core to the Java 2 platform: Java Foundation Classes (JFC), Security, Java IDL, JDBC™, JavaBeans™, Remote Method Invocation (RMI), Java 2D, and the Collections Framework. HP also includes the implementation of a non-blocking I/O Poll API for Java in the com.hp.io package.

    com.hp.io.Poll supports a general mechanism for reporting I/O conditions associated with a set of FileDescriptors and for waiting until one or more conditions becomes true. Specified conditions include the ability to read or write data without blocking, and error conditions. Use of com.hp.io.Poll dramatically reduces the number of threads required to support large numbers of clients in large server-side Java applications.

    The packages included in the APIs core to the Java 2 platform are described at: http://java.sun.com/products/jdk/1.3/docs/api.

    IDL compiler
    The JavaSoft idlj compiler is available in this release. This allows developers to define their application interfaces in a program neutral interface language. The idl interface files are compiled into Java files via this compiler. It also generates portable client stubs and server skeletons that work with any CORBA-compliant Object Request Broker. It produces CORBA 2.3 compliant code. Refer to http://java.sun.com/reference/docs/index.html for more information.

    JNDI
    The Java Naming and Directory Interface is available in this release. This makes it possible to have a federated naming service as part of your application. Currently LDAPv2, CosNaming, and RMI Registry Server Provider Interfaces are available on our JDK platform.

    ORB support
    The JavaSoft ORB has been updated to CORBA 2.3.2 compliancy. One of the new features specified in this update is "objects passed by value." Refer to the OMG documents at http://www.omg.org/ for more information on this CORBA version.

    RMI
    New RMI run-time classes are included in this release. They provide greater performance and functionality for RMI applications running over the JRMP protocol.

    RMI/IIOP
    New RMI run-time classes are included that allow RMI applications to run over the IIOP protocol.

    Also, a new rmic compiler is provided that understands the "-iiop" option that produces stub and skeleton files that communicate via the IIOP protocol. This makes it possible for RMI clients and servers to communicate with their CORBA counterparts. Refer to http://java.sun.com/docs/index.html for more information.

    installation

    patches

    Operating system patches should be installed before you install the software. To determine which patches have been installed on your machine, login as root and check your machine with: /usr/sbin/swlist -l product

    For the most up-to-date list of required and recommended patches, and instructions on where to obtain them, go to the Java Required Patches page. Please install any dependency patches as well. These will be listed on the IT Resource Center web page from where you download the patch.

    minimum system recommendation

    Users will get the best performance with HP server series rp5400, rp7400, rp8400, and Superdome, and PA-8600-based workstations. The recommended minimum system for running Java applications is a PA-RISC 2.0 system.

    installation instructions

    If you download the software from the website, you need approximately 100 MB of disk space on your system to install the software.

    The HP-UX SDK, for the Java™ 2 Platform installs under /opt/java1.3. As root user, use the SD-UX swinstall command to install the software:

    /usr/sbin/swinstall

    It will lead you through the installation. Change Source Depot Type to "Local Directory" and Source Depot Path to /tmp/<filename>. (If you used a directory other than /tmp in the previous step, replace /tmp with that directory name.) We recommend you select the "Reinstall filesets" and unselect the "Mount filesystems" option from the options menu.

    WARNING: Do not unarchive rt.jar, il8n.jar, jpda.jar, and tools.jar. These files are needed by the SDK tools and the runtime environment.

    Add the directory /opt/java1.3/bin to your PATH.

    For information on setting important system parameters required for correct execution of Java programs see the Programmer's Guide for Java™ 2.

    file structure

    The diagram below displays an abbreviated form of the file structure: diagram displaying an abbreviated form of the file structure

    The tools install under opt/java1.3/bin and the libraries install under opt/java1.3/lib. The tools.jar file contains the classes for supporting the tools and utilities. The file dt.jar contains the DesignTime archive of BeanInfo files.

    The jre directory includes the runtime environment. The file rt.jar contains the runtime classes for the core API. The file il8n.jar contains the internationalization and localization classes and files. The security directory contains security management files. The PA_RISC and PA_RISC2 directories contain the shared libraries used by the HP-UX platform. The file src.jar contains an archive of source files for the core API for informational purposes. To view the files, enter the command: $ jar xvf src.jar.

    The include directory contains the header files for supporting JNI and JVMDI.

    usage documentation

    For additional information see the Programmer's Guide for Java™ 2.

    The Java 2 Platform, Standard Edition, v 1.3 API Specification is provided at http://java.sun.com/j2se/1.3/docs/api/index.html. Note: Only the java.x packages are supported.

    The Java Class Libraries: Second Edition, Volume 1 by Patrick Chan, Rosanna Lee, and Douglas Kramer is available at http://java.sun.com/docs/books/chanlee/supplement/

    The Java Class Libraries: Second Edition, Volume 2 by Patrick Chan and Rosanna Lee is available at http://java.sun.com/docs/books/chanlee/second_edition/

    Below are some additional documentation notes about tools, threads, JNI, CLASSPATH, migrating from Java 1.1 to Java 2, JAR files, support for locales, JPDA, and miscellaneous items.

    supported tools and options

    To run a tool on HP-UX, either use the full path name or add the path to the startup file. For example, for javac, on the command line you could enter: /opt/java1.3.1/bin/javac yourfile.java. You could alternatively add /opt/java1.3.1/bin to your PATH statement and on the command line enter: javac yourfile.java

    The HotSpot technology accepts all of the standard tools and options. The standard tools and the standard documentation references are noted below:

    The appletviewer tool is documented at http://www.java.sun.com/products/jdk/1.3/docs/tooldocs/solaris/appletviewer.html

    CLASSPATH is documented at http://www.java.sun.com/products/jdk/1.3/docs/tooldocs/solaris/classpath.html

    The jar tool is documented at http://www.java.sun.com/products/jdk/1.3/docs/tooldocs/solaris/jar.html

    The java tool is documented at http://www.java.sun.com/products/jdk/1.3/docs/tooldocs/solaris/java.html

    The javac tool is documented at http://www.java.sun.com/products/jdk/1.3/docs/tooldocs/solaris/javac.html

    The javadoc tool is documented at: http://www.java.sun.com/products/jdk/1.3/docs/tooldocs/solaris/javadoc.html

    The javah tool is documented at: http://www.java.sun.com/products/jdk/1.3/docs/tooldocs/solaris/javah.html

    The javap tool is documented at: http://java.sun.com/reference/docs/index.html

    The jdb (JPDA) jdb tool is documented at: http://java.sun.com/docs/index.html

    The old jdb (old jdb for classic technology only) tool is documented at: http://java.sun.com/j2se/1.3/docs/tooldocs/win32/oldjdb.html

    The extcheck tool is documented at: http://java.sun.com/reference/docs/index.html

    The rmic tool is documented at: http://java.sun.com/reference/docs/index.html

    The rmiregistry tool is documented at: http://java.sun.com/reference/docs/index.html

    The rmid tool is documented at: http://java.sun.com/reference/docs/index.html

    The serialver tool is documented at: http://java.sun.com/reference/docs/index.html

    The native2ascii tool is documented at: http://java.sun.com/reference/docs/index.html

    The keytool tool is documented at: http://java.sun.com/reference/docs/index.html

    The jarsigner tool is documented at: http://java.sun.com/reference/docs/index.html

    The policytool tool is documented at: http://java.sun.com/reference/docs/index.html

    The tnameserv tool is documented at: http://java.sun.com/reference/docs/index.html

    The idlj tool is documented at: http://java.sun.com/reference/docs/index.html

    additional HotSpot option information

    The HotSpot technology accepts all of the standard options. The HotSpot technology supports the following non-standard -X options:

    -X

    Prints out a brief usage message describing the non-standard options.

    -Xaprof

    Enable the AllocationProfiler, a simple allocation profiler for Java. The profiler collects and prints the number and total size of instances allocated per class, including array classes. The profiler is currently global for all threads.

    -Xbatch

    Disables background compilation. If compilation of a large method is taking a long time, the performance engine will revert to interpreting the method. It will compile the method as a background task, running the method in interpreter mode until the background compilation is finished. The -Xbatch flag disables background compilation so that compilation of all methods proceeds as a foreground task until completed, regardless of how long the compilation takes. This flag is provided for users who desire more deterministic behavior of method compilation for purposes such as benchmarking.

    -Xbootclasspath:<bootclasspath>

    Specify a colon-separated list of directories, JAR archives, and ZIP archives to search for boot class files. The specified boot class libraries will be used instead of the boot class files in the jre/lib/rt.jar archive normally used by the Java 2 software.

    -Xincgc

    Enable the incremental garbage collector. The incremental garbage collector, which is off by default, will eliminate occasional garbage-collection pauses during program execution. However, it can lead to a roughly 10% decrease in overall performance.

    -Xint

    Operate in interpreted-only mode. Compilation to native code is disabled, and all bytecodes are executed by the interpreter. The performance benefits offered by the Java HotSpot adaptive compiler will not be present in this mode.

    -Xmn

    Set the Java new generation heap size (for example: -Xmn64m). The "new generation" is the first generation in HotSpot's generational garbage collector. This option replaces the option -XX:NewSize=N.

    -Xms<size>

    Specify the initial size, in bytes, of the memory allocation pool. This value must be a multiple of 1024 greater than 1MB. Append the letter k or K to indicate kilobytes, or m or M to indicate megabytes. The default value is 5248KB. Examples:

    -Xms4194304
    -Xms4096k
    -Xms4m

    -Xmx

    Specify the maximum size, in bytes, of the memory allocation pool. This value must be a multiple of 1024 greater than 2MB. Append the letter k or K to indicate kilobytes, or m or M to indicate megabytes. The default value is 64MB. Examples:

    -Xmx83886080
    -Xmx81920k
    -Xmx80m

    -Xnoclassgc

    Disables class garbage collection.

    -Xprof (Excerpt below from Sun Microsystems' documentation.)

    Profiles the running program, and sends profiling data to standard output. This option is provided as a utility that is useful in program development and is not intended to be be used in production systems.

    -Xrs (SDK for hp-ux version 1.3.1 and later)

    Reduces use of operating-system signals by the Java virtual machine (JVM), allowing for orderly shutdown of a Java application. Allows user cleanup code (such as closing database connections) to run at shutdown, even if the JVM terminates abruptly. For more information, see Javasoft's documentation at: http://java.sun.com/j2se/1.3/docs/tooldocs/solaris/java.html.

    -Xss<size>

    Specify the size of stack for each new Java thread. The default Java thread stack size is 512 KB. This flag is appropriate for programs that have small thread stack size requirements and/or create several thousand threads, potentially running out of virtual memory. Program threads that overflow the allocated stack will receive java.lang.StackOverFlowException.

    Defaults:   -Xss512k (Java 1.3 and 1.4 32-bit mode)
      -Xss1m (Java 1.4 64-bit mode)

    -XX:+AllowUserSignalHandlers

    Using this command instructs the JVM not to complain if the application installs signal handlers.

    -XX:MaxNewSize=<size> (not supported on 1.3) (excerpt from http://java.sun.com/docs/hotspot/VMOptions.html)

    Sets the maximum size of new generation (in bytes). Note that in HotSpot 1.0.1 this option took an integer that specified a value in Kbytes. Starting with HotSpot 1.3.1, the integer argument specifies bytes. The arguments can now be followed by either 'k' or 'm' to specify Kbytes or Mbytes.

    -XX:NewSizeThreadIncrease=<sizeInKb>

    Sets the additional size added to desired new generation size per non-daemon thread (in bytes). Note that in HotSpot 1.0.1 this option took an integer that specified a value in Kbytes. Starting with HotSpot 1.3.1, the integer argument specifies bytes. The arguments can now be followed by either 'k' or 'm' to specify Kbytes or Mbytes.

    -XX:MaxPermSize

    Sets the maximum size of permanent generation (in bytes). Note that in HotSpot 1.0.1 this option took an integer that specified a value in Kbytes. Starting with HotSpot 1.3.1, the integer argument specifies bytes. The arguments can now be followed by either 'k' or 'm' to specify Kbytes or Mbytes.

    -XX:NewSize=<size> (excerpt from http://java.sun.com/docs/hotspot/VMOptions.html)

    Sets the default size of new generation (in bytes). Note that in HotSpot 1.0.1 this option took an integer that specified a value in Kbytes. Starting with HotSpot 1.3.1, the integer argument specifies bytes. The arguments can now be followed by either 'k' or 'm' to specify Kbytes or Mbytes.

    -XX:+UseCompilerSafepoints (PA-RISC 1.3.1, 1.4 and later, Itanium 1.4.2 and later)

    Enables compiler safe points. In this version, compiler safe points is off by default. Enabling compiler safepoints guarantees a more deterministic delay to stop all running java threads before doing a safepoint operation, namely garbage collection and deoptimization. For patch information, see "Known Problems" in these release notes.

    -XX:+UseOnStackReplacement (PA-RISC 1.3.1, 1.4 and later, Itanium 1.4.2 and later)

    Enables on stack replacement. In this version, on stack replacement is off by default. On stack replacement enables the interpreter to go into compiled code while it is executing the same instance of the method call. For example, if the VM is executing a method that has a loop with a large number of iterations, an intra-method hotspot will occur. To get better performance, the method should run in compiled mode instead of interpreted mode. If you enable on stack replacement, you should also enable compiler safe points (see the previous section).

    -XX:+UseSIGUSR2

    Use the java command line option -XX:+UseSIGUSR2 if you want the JVM to use SIGUSR2 for internal operations like Thread.interrupt() calls instead of SIGUSR1, the default. This allows you to better implement third-party middleware applications that in some versions want to use SIGUSR1 for similar purposes in their native code.

    HP specific options and features

    Additional HP specific documentation is provided in the HP-UX Programmer's Guide at: Programmer's Guide for Java™ 2

    Noteworthy HP specific options and features for Java 2 version 1.3 include the following:

  • -pa11
  • -Xeprof
  • -Xnocatch
  • -Xprep
  • -verbosegc
  • -Xverbosegc
  • and the FastSwing feature.
  • These are described below.

    -pa11 option
    HP's PA-RISC 2.0 architecture offers performance features not compatible with previous architectures. PA1.1 binaries can be run on a PA1.1 as well as PA2.0 based systems; however, a PA2.0 binary can only run on a PA2.0 based system. Starting with the 1.2.2 release of the SDK, HP includes two versions of the shared libraries comprising APIs and VMs. The PA2.0 shared libraries will be default if the user is running on a PA2.0 system. The user can override the use of the PA2.0 version of the shared libraries on a PA2.0 by specifying the -pa11 flag. For example:

    On a PA2.0 based system, invoking Java by typing

    java -version

    results in something similar to:

    java version "1.3.1"
    HotSpot VM (..., mixed mode, PA2.0 build 1.3.1.00-00/04/23-PA_RISC 2.0)

    The generated version string indicates that the PA2.0 version of the VM will be used.

    You can override the use of the PA2.0 version of the VMs and APIs on a PA2.0 system by adding the -pa11 flag as follows:

    java -pa11 -version

    This results in something similar to:

    java version "1.3.1"
    HotSpot VM (..., mixed mode, PA1.1 build 1.3.1.00-00/-4/23-PA_RISC 1.1)

    The version string indicates that the PA1.1 version of the VM in spite of the fact that we are running on a PA2.0 system.

    Note: If you run HotSpot with the -pa11 flag or run on a PA 1.1 system, your heap address space will be restricted to 1G.

    -Xeprof option
    The -Xeprof option generates profile data for HPjmeter. The -Xeprof option enables profiling of Java applications running on HotSpot version 1.2.2.05 or greater and collects method clock and CPU times, method call count, and call graph. (For more information on HPjmeter, see HPjmeter Downloads and Documentation.)

    To profile your application use the following command:

    java -Xeprof:<options> ApplicationClassName

    To profile your applet, use:

    appletviewer -J-Xeprof:<options> URL>

    where <options> is a list of <key>[=<value>] arguments separated by commas.

    After the profiled applet or application normally terminates execution, the Java Virtual Machine writes the profile data to a file in the current directory.

    We have found the following options useful in most cases:

    For CPU time metrics with minimal intrusion:

    -Xeprof or
    -Xeprof:ie=no

    Exact call count information and object creation profiling:

    -Xint -Xeprof:ie=no

    To see the complete list of available options, use

    java -Xeprof:help

    Here are the supported -Xeprof options:

    file=<filename>

    The profile data will be written to the named file. The default is java.eprof.

    times=quick|thorough

    Collect call graph with inclusive method clock and CPU times and method call count.

    This option uses tracing with reduction and collects the data separately for each thread, throughout the whole execution time of the program.

    The quick value instructs the profiler to use the hardware Interval Timer register for time measurement. This value results in faster profiling runs, but in very rare circumstances can produce inaccurate data. This is the default for PA-RISC 2.0 based machines. If you ever suspect that the profile data generated using the quick value is incorrect then redo the run to see whether the results can be replicated.

    The thorough value is the opposite of quick, disabling the use of the Interval Timer. The profiling runs will be longer, but will provide timing data with the same quality as the system calls used to measure the time. However, the profiling intrusion and overhead also increase. This is the default for PA-RISC 1.1 based machines.

    ie=yes|no

    Enable/disable the profiling intrusion estimation.

    ie=yes, the default value, specifies that the profiler estimate the profiling intrusion and write the estimated values to the profile data file. A future version of HPjmeter will be able to present the timing data as: raw, meaning the data as collected, or compensated, meaning with the estimated intrusion subtracted.

    Disabling intrusion estimation reduces the size of the data files, but will also disable the intrusion compensation feature.

    inlining=disable|enable

    Disable/enable inlining in the HotSpot VM.

    The compiler in the HotSpot VM optimizes Java applications by inlining frequently called methods. Execution of inlined methods does not count as "calls" from the profiler's viewpoint. Instead, the time spent in an inlined method is attributed to its caller.

    The count of created objects cannot be reliably estimated in the presence of inlining, because the calls to the constructors may have been inlined.

    To obtain an accurate method call count and to enable the created objects metric, run the VM with inlining=disable.

    -Xnocatch
    The -Xnocatch option disables the Java "catch-all" signal handler. Use this option to generate clean stack traces from native code.

    -Xprep
    The -Xprep option is used to dynamically preprocess (modify) bytecodes of the classes loaded by the VM. Its syntax is:

    -Xprep <factory_class_name>:<arguments>

    where <factory_class_name> is a qualified name of the class that will be used to create the preprocessor, and <arguments> is any string that will be passed to the method creating the preprocessor. The location of the factory class must be specified in the -Xbootclasspath option passed to the VM, together with the location of the appropriate rt.jar.

    When the -Xprep option is specified, before loading the application classes, the Java VM will load the specified factory class and execute the method in the class declared as:

    class <factory_class_name> implements Preprocessor {
    public static Preprocessor createPreprocessor (String arg)

    where Preprocessor is an interface defined as:

    package hp.javatools.bytecode;
    public interface Preprocessor {
    public abstract byte[] instrument (String name, byte[] klass); }

    The VM will pass the <arguments> specified in the -Xprep option to the createPreprocessor method as its only argument. The Preprocessor object returned by the invocation will be saved by the VM.

    For each subsequently loaded class, the VM will invoke the instrument() method on the Preprocessor object, passing the name of the class being loaded, and the bytecode representation of the class. The returned array of bytes will be used by the VM as the replacement of the original version of the class. If null is returned, the original version of the class will be used.

    -verbosegc or -verbose:gc
    Prints out the result of a garbage collection to the stdout stream. At every garbage collection, the following 5 fields are printed:

    [%T %B->%A(%C), %D]

    %T is "GC:" when the garbage collection is a scavenge, and "Full GC:" when its a full garbage collection. A scavenge collects live objects from the New Generation only, whereas a full garbage collection collects objects from all spaces in the Java heap.

    %B is the size of Java heap used before garbage collection, in KB.

    %A is the size after garbage collection, in KB.

    %C is the current capacity of the entire Java heap, in KB.

    %D is the duration of the collection in miliseconds.

    -Xverbosegc<options>
    To better understand how garbage collection works in the HotSpot JVM, we recommend the article "Improving Java Application Performance and Scalability by Reducing Garbage Collection Times and Sizing Memory Using JDK 1.4.1" (November 2002) by Nagendra Nagarajayya and J. Steven Mayer. The article describes garbage collectors in SDK 1.4.x, however it also covers the older collectors used in 1.3.x.

    In addition, we recommend HP's tool HPjtune, which graphically displays information contained in an Xverbosegc log.

    This option prints out detailed information about the spaces within the Java Heap before and after garbage collection.

    The syntax of the option is:

    -Xverbosegc[:help]|[0|1][:file=[stdout|stderr|<filename>]]

    :help prints this message.

    0|1 controls the printing of heap information:

    0 Print only after each full GC
    1 (default) Print after every Scavenge and Full GC

    :file=[stdout|stderr|<filename>] specifies output file

    stderr (default) directs output to standard error stream
    stdout directs output to standard output stream
    <filename> file to which the output will be written

    At every garbage collection, the following 18 fields are printed:
    <GC: %1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 %12 %13 %14 %15 %16 %17 %18 >

    1: Indicates the cause of the garbage collection.
        -1: indicates a scavenge (during a scavenge only objects from
            the New space are collected)
        0-6: indicates a full garbage collection (during a full garbage
             collection objects from all areas are collected)
    The code indicates the reason for the full garbage collection as follows:
        Reason:
        0:  Call to System.gc()
            The call was made by the application.
        1:  Old Generation full
            An object was to be allocated in the Old Generation, but there
            was no room there.
        2:  Permanent Generation full
            The heap area holding the reflection objects (representing Java
            classes and methods) was full.
        3:  Train Generation full
            Reserved for Java Virtual Machine developers
        4:  Old generation expanded on last scavenge
            Due to implementation reasons, if the Old Generation expanded
            on last scavenge, no more scavenges can be performed reliably
            before the next full garbage collection.
        5:  Old generation too full to scavenge
            An object was to be allocated in the New Generation, but there
            was no room there.  However, the VM has determined that the Old
            Generation was likely too full for a scavenge to compete without
            expanding the Old Generation.  Therefore a full garbage collection
            was performed rather than a scavenge.
        6:  FullGCAlot
            Reserved for Java Virtual Machine developers.
    %2: The time elapsed between the Java program start and the start of this
        garbage collection event.
    %3: Garbage collection invocation. This is the sequential number (count) of the
        garbage collection event. Counts of Scavenge and
        Full GCs are maintained separately. 
    %4: Size of the object allocation request that forced the GC, in bytes.
    %5: Tenuring threshold - determines how long the new born object
        remains in the New Generation.
        The report includes the size of each space:
           Occupied before garbage collection (Before)
           Occupied after garbage collection (After)
           Current capacity (Capacity)
    All are in bytes.
    Eden sub-space (within the New Generation)
    %6:  Before
    %7:  After
    %8:  Capacity
    Survivor sub-space (within the New Generation)
    %9:  Before
    %10: After
    %11: Capacity
    Old Generation
    %12: Before
    %13: After
    %14: Capacity
    Permanent Generation (Storage of Reflective Objects)
    %15: Before
    %16: After
    %17: Capacity
    %18: Duration of the garbage collection in seconds.
    

    FastSwing
    FastSwing is an HP feature which provides significant performance improvement for Swing Applications on a Remote X-Server. Remote X-Servers include X-Terminals, PC-XServers like Exceed and Reflection X and remote UNIX workstations.

    To use this feature invoke java or appletviewer as follows:

    /opt/java1.3.1/bin/java -Dhp.swing.useFastSwing=true MyApp

    or

    /opt/java1.3.1/bin/appletviewer -J-Dhp.swing.useFastSwing=true applet.html

    Currently we recommend using this feature only for Remote displays as it has the following caveat:

    Double-buffered Swing Components cannot perform Graphics2D operations with the FastSwing feature turned on. When doing so you will get the following exception:

    java.lang.ClassCastException: sun.awt.motif.X11OffScreenImage
    at BezierAnimationPanel.run(BezierAnimationPanel.java:223)
    at java.lang.Thread.run(Unknown Source)
    threads

    Green threads is not included in the HP-UX SDK, for the Java™ 2 Platform.

    Using JNI - main/primordial thread stack size limits

    The primordial thread is the first thread when a process is created. This is the thread that has the main method. It is also called the main thread. The primordial thread stack size is controlled by the kernel parameter maxssiz or maxssiz_64bit. The Java VM (JVM) has two options for controlling the stack size:

    -XX:MainThreadStackSize=n
    -Xss[n][k or m]

    In the Java VM the size of the primordial thread is restricted to the *greater* of MainThreadStackSize (default 2M) or ThreadStackSize (specified by -Xss). For example, if you specify -Xss1m, the JVM still takes 2M for the main thread. And if you specify -Xss4m, the JVM takes 4M for the main thread as well.

    If your application calls JNI_CreateJavaVM or JNI_AttachCurrentThread from the primordial thread, under certain conditions 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, even if no Java code was ever run on the primordial thread.

    One workaround is to use the option -XX:MainThreadStackSize=<value> to increase the primordial thread stack size, However be aware that -XX options are non-standard options, and are liable to change from release to release.

    Other workarounds and examples are provided in our Programmer's Guide along with the effects of using maxssiz on the amount of writeable data space available to the application. Refer to the JNI chapter of our Programmer's Guide for Java 2 at: Using Java™ 2 JNI on HP-UX

    Using JNI - non-main/primordial thread stack size limits

    The default stack size for 1.4 64-bit mode JVM- created threads is 1MB. On PA-RISC 32 and 64-bit systems, the default stack size is 64KB. Therefore, if you are using C language main programs that attach with JNI, you will want to adjust the stack size to avoid overflows.

    Here are some suggestions to work around stack overflow problems in threads other than the main thread:

  • If the thread is created in native code and is attached to Java through JNI_AttachCurrentThread, increase the stack size attribute when creating the thread with pthread_create.
  • If the thread is created inside Java and there is a stack overflow condition, increase the thread stack size with -Xss<n>
  • using JNI

    Dereferencing NULL Pointers

    In Java 2, JNI code that incorrectly dereferences NULL will result in a SIGSEGV, which may be different behavior than that experienced with Java 1.1 releases. For example, in Java 1.1, JNI methods that dereference NULL pointers like this:

    int *p = NULL;
    return *p;

    will return the value 0.

    With the Java 2 the HotSpot VM, such dereferences result in a SIGSEGV, and java NULL checks can be performed without having to emit explicit code to do so. With Java 2 HotSpot, the signal is caught, and a null pointer exception is thrown if the offending instruction was within the VM (compiled code, or in the interpreter). This method may uncover hidden programming errors.

    Also, if you are including the HP-UX Runtime Environment for the Java 2 Platform in an application and bypassing our standard driver, for example by making calls to JNI_CreatJavaVM from inside the application, link the application with the "-z" option. The -z option will indicate that dereferencing NULL pointers in the application should generate a SIGSEGV instead of the traditional behavior of returning zero. If you do not, you will not be able to take advantage of implicit null pointer checks; null pointer checks will have to be explicit, potentially degrading performance. Linking with -z may also expose existing but quiet bugs in an application. This is because the SIGSEGVs were not being generated before.

    C and C++ libraries

    HotSpot requires use of the HP aC++ compiler for any application C or C++ libraries loaded dynamically at runtime. Libraries compiled with the cfront HP C++ compiler will not work with HotSpot.

    CLASSPATH

    CLASSPATH will be automatically set during installation. If you get the error "Unable to initialize threads: cannot find class java1.3.1/lang/Thread", your CLASSPATH environment variable may be incorrect.

    See also http://java.sun.com/reference/docs/index.html.

    compatibility between release 1.3 and previous releases

    Compatibility information is provided at: http://java.sun.com/j2se/1.3/compatibility.html.

    migrating from Java 1.1 to Java 2

    Information to assist you in migrating from 1.1 to Java 2 is provided at http://java.sun.com/reference/docs/index.html.

    The SDK 2 java launcher tool replaced the JDK 1.1 jre tool.

    JAR files

    If you run an applet from a JAR file, the classes files should only be available in the JAR file, and the JAR file should not be in the class path.

    using font property files

    Java font property files map Java virtual (or "logical") fonts to platform-specific fonts. These are delivered in $JAVA_HOME/jre/lib and are platform-specific. As with any Java property file, font property files are sensitive to your locale setting.

    For information on adding Asian fonts, see other topics in these Release Notes. In addition, you will find good background information on these web sites: http://java.sun.com/products/jdk/1.2/docs/guide/internat/fontprop.html and http://java.sun.com/j2se/1.3/docs/guide/intl/addingfonts.html

    support for locales

    The HP-UX proprietory encodings used by the following HP-UX propietory locales are not recognized by the runtime environment.

    ar_DZ.arabic8 fr_FR.roman8
    ar_SA.arabic8 is_IS.roman8
    da_DK.roman8 it_IT.roman8
    de_DE.roman8 iw_IL.hebrew8
    el_GR.greek8 ja_JP.kana8
    en_GB.roman8 nl_NL.roman8
    en_US.roman8 no_NO.roman8
    es_ES.roman8 pt_PT.roman8
    fi_FI.roman8 sv_SE.roman8
    fr_CA.roman8 tr_TR.turkish8

    The following locales are supported:

    C.iso88591 hu_HU.iso88592
    C.iso885915 is_IS.iso88591
    bg_BG.iso88595 is_IS.iso885915@euro
    cs_CZ.iso88592 it_IT.iso88591
    da_DK.iso88591 it_IT.iso885915@euro
    da_DK.iso885915@euro ja_JP.SJIS
    de_DE.iso88591 ko_KR.eucKR
    de_DE.iso885915@euro nl_NL.iso88591
    el_GR.iso88597 nl_NL.iso885915@euro
    en_GB.iso88591 no_NO.iso88591
    en_GB.iso885915@euro no_NO.iso885915@euro
    en_US.iso88591 pl_PL.iso88592
    es_ES.iso88591 pt_PT.iso88591
    es_ES.iso885915@euro pt_PT.iso885915@euro
    fi_FI.iso88591 ro_RO.iso88592
    fi_FI.iso885915@euro ru_RU.iso88595
    fr_CA.iso88591 sk_SK.iso88592
    fr_CA.iso885915 sl_SI.iso88592
    fr_FR.iso88591 sv_SE.iso88591
    fr_FR.iso885915@euro tr_TR.iso88599
    hr_HR.iso88592 zh_CN.hp15CN
      zh_TW.big5

    Japanese localization

    Use this procedure to display Japanese text.
    1. To install the Ricoh fonts, run /usr/sbin/ttinstall provided by the Japanese System Environment (JSE) on the WABUN/W31NT31 fonts. It will install the fonts to /usr/lib/X11/fonts/ttfjpn.st.
    2. Add the Ricoh installation location to the JAVA_FONTS variable. The default is: JAVA_FONTS=/usr/lib/X11/fonts/ttfjpn.st/typefaces
    3. Install the Ricoh font property file to $JAVA_HOME/jre/lib. Beginning with SDK 1.3.1 and later, the Ricoh property file is shipped. With proper (root) privileges, copy it to font.properties.ja as follows:
      su
      cd $JAVA_HOME/jre/lib/
      cp font.properties.ja.Ricoh font.properties.ja
    4. Set LANG to the Japanese locale ja_JP.SJIS in your runtime environment, or simply use CDE locale login.

    date/time methods - new defaults

    Since SDK 1.2.2.09 and SDK 1.3.1, there has been a change in the way the HotSpot JVM uses the gettimeofday() system call to obtain date and time information.

    For performance reasons a new mechanism is used that uses the number of cpu ticks since the application started, to calculate the current time.

    As a result, changes to the system date or time using date(1), adjtime(2) or time synchronization utilities such as ntp will not be reflected in the date and time that Java returns, until the process is restarted.

    If your application requires that Java immediately reflects such system time changes, you can use the -XX:+UseGetTimeOfDay option to tell the JVM to use the gettimeofday call instead of the new, lightweight mechanism. However you may notice a drop in performance.

    starting the X Font Server in X Windows UNIX

    In X Windows UNIX environments, you can use X Font Server as an alternative to storing fonts in directories. For an X Server machine to access the X Font Server, the daemon xfs must be running and xfs must be added to the X fontpath via xset.

    If you set RUN_X_FONT_SERVER in /etc/rc.config.d/xfs, xfs is started upon reboot and xfs is added to the font path.

    Alternatively you can use these two commands:

    # add xfs to the font path
    /usr/bin/X11/xfs -config /etc/X11/fs/config -port 7000 -daemon
    xset +fp tcp/localhost:7000

    using a large Java heap

    large Java heap sizes: expanding heap size to 3.8GB in native apps
    If you embed libjvm in a native application, and wish to use a large Java heap, you need to ensure that enough private data space is enabled. For both HP-UX 11.0 and 11i, by using HP-UX's EXEC_MAGIC linked with "-N" you can expand your available memory space from 1GB to around 1.7GB.

    On HP-UX 11i, with the installation of Patch PHKL_25614, you can get larger Java heap by using the commands below. (For more information on installing patches, go to: http://h18012.www1.hp.com/java/patches/index.html.)

    For 1500MB to 2400MB of Java heap, use this command:

    chatr +q3p enable <executable name>

    For 2400MB to 3.8GB of Java heap, use this command:

    chatr +q3p enable +q4p enable <executable name>
    large Java heap sizes: expanding heap size to 3.8 GB (hp-ux 11i)
    Hotspot 1.3.1 now supports heaps up to 3.8 GB on HPUX 11.i, with the installation of patch PHKL_25614. (For more information on installing patches, go to: http://h18012.www1.hp.com/java/patches/index.html.)

    For Java invoked from the command line on HP-UX 11i, Java will automatically choose an appropriate executable. For heaps less than 1500MB, the executable will simply be called 'java'. For heaps greater than or equal to 1500MB, and less than 2400MB, the executable is 'java_q3p'. If the Java heap is 2400MB or higher, the executable is 'java_q4p'. You do not need to directly invoke these programs. Just invoke 'java' as usual, and the appropriate program will be run for you.

    In addition, be aware that if you wish to use very large heaps, because of segmentation in the HP-UX virtual address space, when the Java heap is larger than 3000MB, either new space (-Xmn) or old space (-mx minus -Xmn) must be approximately 850MB or less.

    using JPDA

    The JPDA architecture and components are documented at http://java.sun.com/products/jpda/ and http://java.sun.com/reference/docs/index.html . HP's SDK version 1.3.0.01 supports both the HotSpot and Classic VMs. The jdb for HP-UX is similar to the Solaris implementation. For usage information, see "Sun VM Invocation Options" at http://java.sun.com/products/jpda/doc/conninv.html.

    manually launching the application VM

    (excerpted from http://java.sun.com/products/jpda/readme.html)

    If you are running the version of jdb provided in this release, the application VM is launched for you with the debugger back end loaded. However, in the following cases, you will be launching your own application VM, either by hand or in your implementation.
    1. Remote debugging with the -attach or -listen jdb option.
    2. You are implementing a debugger which uses the JDWP directly.
    3. You are implementing a debugger back end which uses JVMDI.

    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 disables the default sun.tools.debug debug Agent. The -Djava.compiler=NONE 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://java.sun.com/products/jpda/doc/conninv.html contains more information on necessary VM invocation options and sub-options of -Xrunjdwp.

    closing a socket when accept or read is pending

    If you have one thread performing an accept or read on a socket, and try to close the socket to clean up resources, the default behavior is for the close() to block until the accept or read call completes. If you want to change this behavior, you should use the following Java command line option:

    -XdoCloseWithReadPending

    This option allows one thread to close a socket when there is an outstanding accept or read pending on the same socket from another thread.

    With the -XdoCloseWithReadPending option, the socket close() call closes the socket and, in the context of the thread with the pending read or accept, a SocketException with the message "Socket closed" is thrown.

    miscellaneous

    For detailed information on Java 2 SDK features and tools, go to http://java.sun.com/products/jdk/1.2/docs/index.html.

    The Java 2 Platform API Specification is available at http://java.sun.com/products/jdk/1.2/docs/api/index.html.

    The Java Class Libraries, Second Edition, by Patrick Chan and Rosanna Lee provides additional details on the class libraries.

    Other documentation on the Core APIs can be found at:
    Java Foundation Classes: http://java.sun.com/products/jfc/docs.html
    Java Security: http://java.sun.com/security/index.html
    Java IDL: http://java.sun.com/products/jdk/1.2/docs/guide/idl/index.html
    JDBC: http://java.sun.com/products/jdbc/index.html
    JavaBeans: http://java.sun.com/beans/docs/index.html
    RMI: http://java.sun.com/products/jdk/rmi/index.html
    Java 2D: http://java.sun.com/products/java-media/2D/index.html
    The Collections Framework: http://java.sun.com/products/jdk/1.2/docs/guide/collections/index.html

    Java Language Specification is provided at http://java.sun.com/docs/books/jls/html/index.html.

    The Java tutorial is at http://java.sun.com/docs/books/tutorial/index.html.

    The Swing Connection newsletter can be found at http://java.sun.com/products/jfc/tsc/index.html

    problem fixes and known issues

    Defects fixed in version 1.3.1.01 are shown below.

    Known JavaSoft bugs are documented in the Bug Database at http://developer.java.sun.com/

    Information on JavaSoft 1.3 fixed bugs is available at http://java.sun.com/docs/index.html

    problem fixes

    The 1.3.1.01 release includes enhancements and fixes for the following defects:

  • JAGad47253 HP SR 8606178026 Enhancement: Speed up Character lowercase/uppercase methods.
  • JAGad51300 HP SR 8606182084 add -Xprep option HotSpot 1.3.1 to enable bytecode preprocessing interface.
  • JAGad51914 HP SR 8606182697 Typing the command java -native gives error.
  • JAGad55318 HP SR 8606186113 Enhancement: Re-examine use of stack buffers in system JNI functions.
  • JAGad56718 HP SR 8606187511 Enhancement: Add lock contention data and garbage collection times to -Xeprof.
  • JAGad58645 HP SR 8606189430 Expand the maximum heap to 3GB.
  • JAGad69530 HP SR 8606200349 ship Ricoh TrueType font.property file for Japanese display.
  • JAGad70958 HP SR 8606201784 Enhancement: Better usability required for full PermSpace.
  • JAGad72953 HP SR 8606203775 In Japanese CDE environment ja_JP.SJIS, Ctrl-V works infrequently on TextField that has had the setEchoChar() method applied to it.
  • JAGad74049 HP SR 8606204871 Monitor dump from the HotSpot VM is incorrect, showing some monitor without owner, but with nonzero entry count.
  • JAGad74054 HP SR 8606204876 JVM reporting different instance size for objects of the same class.
  • JAGad76633 HP SR 8606207457 Typing java -Xrunhprof:help results in core file.
  • known issues

    Below is some information on a few problem topics.

    shl_load HotSpot libjvm problem due to TLS
    The libjvm library for the HotSpot 1.01 JVM uses thread local storage (TLS). Currently the dynamic loader that is used by shl_load does not support dynamically loading a shared library containing TLS when the library was not included in the link line.

    You may have a need to load a library dynamically (using shl_load) that contains TLS, for example libjvm.sl, without having linked your application against it. For example, this might be the case if your application uses plug-ins.

    The current workaround is a new linker feature LD_PRELOAD that is available for HP-UX 11.0 in patch PHSS_24303. For HP-UX 11i the feature will be included in the next update release. For more information on LD_PRELOAD functionality and its limitations, read the man page for dld.sl AFTER you have installed the patch.

    on stack replacement
    In this version, on stack replacement is off by default.
    To enable it, use the -XX:+UseOnStackReplacement option. If the VM is executing a method that has a loop with a large number of iterations, an intra-method hotspot will occur. In order to get better performance, the method should run in compiled mode instead of interpreted mode. On stack replacement enables the interpreter to go into compiled code while it is executing the same instance of the method call. If you use on stack replacement, you should also enable compiler safe points (see the next section).

    HotSpot Compiler safe points
    NOTE: For both HP-UX 11.0 and 11i, using Compiler Safe Points requires a patch. The required patches are shown below. For information on locating and installing the patches, go to the "Installation" section in this document.

    HP-UX 11.0 PHKL_24943
    HP-UX 11i   PHKL_24751

    In this version, compiler safe points is off by default. To turn it on, use the -XX:+UseCompilerSafepoints option. Enabling compiler safepoints guarantees a more deterministic delay to stop all running java threads before doing a safepoint operation, namely garbage collection and deoptimization.

    setting the JAVA_FONTS variable
    The JAVA_FONTS variable is read by the Java runtime to find fonts installed to places other that $JAVA_HOME. For example, X Window fonts could be installed to <xwin>/lib/X11/fonts.

    In this SDK Version 1.3.1, the default value of JAVA_FONTS is
    /usr/lib/X11/fonts/ms.st/typefaces:/usr/lib/X11/fonts/type1.st/typefaces: \
    /usr/lib/X11/fonts/ttf.st/typefaces

    Typically you would augment this list, by adding your additional paths to the above path string. However, with JAGad64950, you will need to override it using a single element:

    export JAVA_FONTS=/usr/lib/X11/fonts/jpnttf.st/typefaces

    Asian characters displayed as empty boxes in Swing
    If Asian (Chinese, Japanese and Korean) characters are displayed as empty boxes in Swing (and all light-weight components) the causes can be:
    1. The environment variable JAVA_FONTS is incorrectly set.
    2. The Asian TrueType fonts/typefaces have not been installed.
    3. The Java font property file for the Asian typefaces has not been installed. This file must correspond to your LANG setting and the typefaces.

    Asian TrueType fonts are not yet available on the HP-UX platform. HP is working on providing those fonts in a future release. In the meantime, you need to obtain the Asian TrueType fonts from Ricoh or equivalent vendors.

    Beginning with the SDK 1.3.1 for HP-UX, the property file for Japanese TrueType fonts (font.properties.ja.Ricoh) is shipped. The section on Japanese Localization in the Usage Documentaion section of these release notes has information on how to copy font.properties.ja.Ricoh to font.properties.ja.

    missing property files for Japanese printing
    Beginning with the SDK 1.3 for HP-UX, postscript printing is supported. The property files necessary for printing Japanese fonts are shipped as psfont.properties.ja and psfontj2d.properties.ja.

    starting the X font server
    Beginning with the SDK 1.3.1 for HP-UX the X font server will no longer be started by default.

    If you want the SDK to start the font server, you can enable auto xfs start by setting the Java system property hp.awt.startFontServer to true as follows: java -Dhp.awt.startFontServer=true myGUIApp

    This is a change from earlier versions of the SDK for HP-UX, which started xfs by default if you were running a GUI application on a local display and xfs was not already started.

    using linker option +noenvvar on Itanium and PA-64 systems
    If your application links with libjvm and uses the JNI interface APIs to load the JVM directly, do not use the linker option +noenvvar on Itanium or PA-64 systems. The defect does not exist on 32-bit systems. It is expected to be fixed in a future release.

    running Java with setuid or setgid
    Java requires dynamic loading (SHLIB_PATH, LD_LIBRARY_PATH) which are disabled in setuid or setgid executables. Therefore Java cannot run with setuid or setgid.

    legal notices
    Copyright © Hewlett-Packard Company 2003

    Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries.