|
This document contains important details for BEA JRockit R26. It contains information on the following subjects:
BEA JRockit R26.4 provides, apart from full support for J2SE 5.0 on all supported platforms, the following areas of improvement:
The performance of BEA JRockit has gone through major improvements for low latency applications by the following additions:
See Figure 3-3 for an illustration of how the performance have been improved with the above improvements.

SPARC performance running BEA WebLogic Server has been improved by approximately 15% compared to BEA JRockit R26.3.
The following tuning options have been added in this release:
For complete information on how to use all tuning options in BEA JRockit, please see the BEA JRockit Reference Manual.
| Note: | The Sparc version of BEA JRockit is a 64-bit JVM only. |
This has happened with BEA JRockit:
The following CRs have been corrected for the BEA JRockit R26.4 release.
When JRockit 1.4.2_10 R26.3 calculates the SUID for a class to be serialized it includes the synthetic bits in the calculation, which generates a SUID that differs from the Sun 1.4.2_10 and BEA JRockit 1.4.2_08 R24. This problem causes serialization to fail.
Synthetic attributes are included in a class when the class references a class pointer
ATestClass.class or uses assertions.
This means that RMI communication between 1.4.2_10 R26.3 and Sun 1.4.2_10 can fail. RMI communication between BEA JRockit 1.4.2_10 R26.3 and BEA JRockit 1.4.2_08 R24.5 can also fail in the same way. Serialized classes, stored in a database, might also fail to be loaded.
|
|||
|
|||
New arguments have been added to enable control of large pages (
-XXlargePages) on Solaris.
|
|||
The verbose framework in BEA JRockit is now stricter and possible ambiguous shortcuts have been removed, for example, the option
-Xverbose:compact no longer works, instead you need to use -Xverbose:compaction.
|
|||
BEA JRockit R26.3.0 could, under rare circumstances, crash when using
-Xgc:gencon. All platforms were affected. This has now been fixed.
|
|||
The following CRs have been corrected for the BEA JRockit R26.3 release.
Multiple issues with
-Xdebug in R24.5.0 have been fixed in this release.
|
|||
The new option
-XXdisableGCHeuristics disables the dynamic garbage collector selection heuristics when
-Xgcprio is used. The JMAPI for changing garbage collectors in runtime can still be used.
|
|||
The initialization of the initial (main) thread on Linux now respects the
-Xss:<size> option, and commits an area corresponding to the largest of this and the current system stack rlimit (see man rlimit).
|
|||
|
|||
A race condition existed in BEA JRockit when the Memory Leak Server was stopped immediately after a client had connected, which caused sockets to be left in
CLOSE_WAIT state. On Linux, this could eventually cause the BEA JRockit process to run out of file descriptors. This problem has now been fixed.
|
|||
Previously a problem regarding the handling of TrueType fonts for certain font files caused a call to
java.awt.Font.getXXX() methods that resulted in an IllegalArgumentException being thrown. This issue has now been fixed. (See, CR252610 for more information).
|
|||
Explicit font support for Asianux, part of Red Flag Linux, has been added for BEA JRockit 1.4.2, keeping the support for Red Flag 4.1 font patch
CR200703 for
LANG=zh_CN.GB2312 locale. The font support is based on the Red Hat Linux font support.
|
|||
In earlier BEA JRockit R26 versions, on Windows operating systems, BEA JRockit could sometimes expose a problem in the OS related to multimedia timers that caused the system time to be adjusted backwards.
|
|||
The following CRs have been corrected for the BEA JRockit R26.2 release.
In earlier releases of the BEA JRockit JDK 1.4.2, it was necessary to specify
-Xmanagement:class=com.JRockit.management.rmp.RmpSocketListener on the command line to start up the Management Server. This can now be done by simply specifying -Xmanagement or by setting the management server port with jrockit.managementserver.port.
|
|
The option
-Xverbose:cpuinfo is now available on IA64.
|
|
For some garbage collectors, the minimum block size value, set by
-XXminBlockSize, was also (incorrectly) used as thread-local area size. With this fix, increasing the -XXminBlockSize value will no longer affect the thread-local area size.
If you have been using
-XXminBlockSize to adjust the thread-local area size, you now must also set
-XXlargeObjectLimit and
-XXtlaSize to the same value as you set -XXminBlockSize, as described in the
BEA JRockit Reference Manual.
|
|
The option
-Xpausetarget didn’t always work when running
-Xgcprio:deterministic. This has now been fixed.
|
|
To make it easier to diagnose JRockit crashes, the option
-XXdumpfullstate has been made default. This means that if BEA JRockit crashes a lot more information is saved to disk than was the case previously. To get the old behavior use
-XXdumpsize:normal.
|
|
The following CRs have been corrected for the BEA JRockit R26.0 release.
In the previous release, BEA JRockit was known to hang or crash on 2.6 kernels on Itanium, due to a bug in the Linux 2.6.11 (and previous) kernel. The bug has now been fixed in kernel 2.6.12 by the Linux vendors.
|
|||
The
-Xmanagement option resulted in an overhead even though the BEA JRockit Management Console was not connected. This has now been fixed.
|
|||
When running JRockit with a concurrent garbage collector, the garbage collector starts before the heap is completely full to be able to finish the garbage collection before running out of heap memory.
tries to determine when a garbage collection needs to be triggered through heuristics, but in certain situations it might be beneficial to set this trigger by hand and to a fixed value. Use the following argument
-XXgcTrigger=<int>, where int is an integer that takes values between 0 and 100. The value specifies the amount of free heap, measured in percentage, that should be available for the argument to trigger.
|
|||
The Memory Leak Detector did not work properly when the management server was started by the Ctrl-Break handler (using
ctrlhandler.act) as opposed to using the
-Xmanagement startup option. This has now been fixed and the Memory Leak Detector works as expected, regardless of how the management server has been started.
|
|||
In previous versions, the maximum stack trace depth value, in JRA recordings, was always 16 frames. In this version it is possible to set this value by adding the “tracedepth” option to
-XXjra and the “jrarecording” ctrlbreak handler.
|
|||
This release of BEA JRockit does not ship with Java Web Start or Java Plug-in. Some earlier releases did and the installers and uninstallers of those versions do not behave properly when this release is installed. To avoid problems with the installation, do one of the following before installing:
|
|||
-XXinternalCompactRatioSets the number of heap parts to compact during internal compaction. Default is dynamic or 8 when running
-Xgcprio:throughput.
-XXexternalCompactRatioSets the number of heap parts to compact during external compaction (aka “evacuation”). Default is dynamic or 8 when running -Xgcprio:throughput.
-XXusePointerMatrixIndicates that the pointer matrix should be used instead of the pointerset. The pointer matrix is default when running -Xgcprio:deterministic or -Xgcprio:pausetime.
|
|||
The command
jrockit.oomdiagnostics.filename specifies where to write out of memory diagnostics (if this is enabled through jrockit.oomdiagnostics). If diagnostics are enabled and no file is specified, the output ends up where the
-Xverbose information ends up (typically stderr).
|
|||
The following issues are known in BEA JRockit R26:
|
If you are using BEA JRockit in conjunction with a native library that relies on OS signals you may experience crashes due to a signal handling conflict between BEA JRockit and the native library.
|
|||
Connecting the Memory Leak Detector to a running JRockit JVM (version R26.3 through R27.5) built for Linux IA-32 might cause the JVM to crash if the JVM process uses more than about 1020 file descriptors at the time. This might only happen if the file descriptor limit has been set higher than 1024 (typically by using the
ulimit command).
Currently you can start the Memory Leak Detector Server at JVM startup, when few file descriptors are in use. To do this, add
-Djrockit.memleak.port=12345 early in the JVM command line.
Now, using JRockit Mission Control, create a custom connection in the JRockit Browser with a Custom JMX service URL of
service:jmx:mlp://localhost:12345. (Replace localhost and the port 12345 as needed). Using this connection, you can connect the Memory Leak Detector in JRockit Mission Control to this JVM once (without restarting the JVM).
Note that using many file descriptors might be an indication of a resource leak in the Java application. Make sure to always close opened files and sockets. You should not rely on the Garbage Collection and the object finalization to free a non-Java resource such as a file descriptor. See
Too Many Open Files at:
|
|||
The new explicit font support for Asianux, part of Red Flag Linux, available since BEA JRockit R26.3.0 depends on the existence and contents of the file /etc/asianux-release to correctly identify a Asianux compatible Linux distribution. If this file is not present the JRockit JDK or JRE will revert to look for
/etc/redhat-release and instead identify a Red Hat Linux compatible distribution with Red Hat compatible font support.
The font support for Asianux is based on the font support for Red Hat Linux, with an additional patch for Chinese LANG=zh_CN.GB2312 locale for Red Flag Advanced Server 4.1 (and higher) in JRockit 1.4.2. Thus, if you are using Chinese zh_CN locale with JRockit 1.4.2 R26.3.0 and later on Red Flag Advanced Server 4.1 (and higher), that does not contain the file
/etc/asianux-release, then BEA JRockit will load the Red Hat-specific font.properties.zh_CN.Redhat file instead of the expected Asianux-specific font.properties.zh_CN.Asianux file. This might cause the JVM to fail and result in unexpected behavior when it tries to load specific fonts with incorrect paths.
On Red Flag Advanced Server 4.1 and Red Flag Advanced Server 4.1 (SP1) the file
/etc/asianux-release file might not be installed by default and if that is the case you can apply either one of the following workarounds.
- Install the optional RPM package asianux-release, if available. This is the preferred solution. On Red Flag Advanced Server 4.1 (SP1) the optional package asianux-release may conflict with the possibly already installed optional package redflag-release, you may choose to either uninstall the redflag-release package before installing the asianux-release package, or to force install the asianux-release package in parallel with the redflag-release package.
|
|||
If you explicitly request to use the Motif AWT instead of the default X11 AWT on Linux/IA64 and run a Linux version with a GLIBC version older than
glibc-2.3.4, this operation might fail with an UnsatisfiedLinkError since the file <jre>/lib/ia64/motif21/libmawt.so requires linkage to GLIBC >= 2.3.4.
See the see the Supported Configurations document for supported Linux versions.
|
|||
In BEA JRockit 26.4, JRA Recordings always report that the heap usage is zero after a garbage collection with a single-spaced garbage collector. The
-Xverbose:memory and -Xverbose:memdbg printouts report the correct value for the heap usage after garbage collection.
|
|||
Upgrading from BEA WebLogic Platform 8.1 SP5 to 8.1 SP6 and running it on BEA JRockit R26 SP3 can result in a performance regression of up to 10%.
To avoid this regression, you can improve the performance of memory intensive applications by setting the command-line options -XXtlaSize:
<default 2kB> and -XXlargeObjectLimit:<default 2kB>.
|
|||
When you expand types in the Type Graph in the BEA JRockit Memory Leak Tool, BEA JRockit can hang and become unresponsive while consuming CPU resources. This issue was introduced as a regression in BEA JRockit R26.2.
|
|||
The synchronization code in
java.util.Random.next() has been optimized for the case where there is no contention, i.e. the java.util.Random object is used by only one thread. A drawback of this optimization is worse performance if the object is used heavily in several concurrent threads. This typically happens if the convenience method java.lang.Math.random() is used.
|
|||
|
A catch block immediately following “
return x.y;” where the variable x points to null, will not catch the null-pointer exception. The exception will be caught in the next catch block.
|
|||
BEA JRockit R26.3.0 can, under rare circumstances, crash when using
-Xgc:gencon. All platforms are affected.
|
|||
BEA JRockit 1.4.2 R26.2 and R26.3 throw a
java.lang.NullPointerException when passing a null argument to java.lang.String.getBytes(String charsetName), while BEA JRockit 1.4.2 R24 did not. The behavior is unspecified but the change might cause problems when running TIBCO with XML messaging on BEA JRockit 1.4.2 R26.2 or R26.3.
|
|||
Occasionally, when using a JVMTI Java debugger, breakpoints are not hit. This issue can arise with any R26 version of the product.
|
|||
Buffers that have been allocated through
ByteBuffer.allocateDirect() would not be released, even when discarded by the application, which causes C heap memory leaks.
|
|||
BEA JRockit crashes when optimizing method. This issue can be identified by the following stack trace:
|
|||
|
|||
|
|||
BEA JRockit R26.0.0 on Linux IA32 can experience problems setting up memory for object allocation. It will manifest itself through this printout (and then exit BEA JRockit):
[JRockit] ERROR: Fatal error in JRockit during memory setup phase. Try to reduce the heap size using -Xmx:<size>m, i.e. “-Xmx:16m”. Could not create the Java virtual machine.
Try different
-Xmx values to find a heap size that is setup correct.
|
|||
Slow startup because of a hang in
java.net.PlainSocketImpl.initProto(), which typically is called when creating the first Socket or ServerSocket.
In BEA JRockit 5.0 R26 the network stack is configured so that IPv6 is used in preference to IPv4 when it is present.
During initialization of the network stack, the network code connects a socket to its own loopback interface to set up some data structures. Blocking this connection (e.g. with a firewall) will cause the initialization code to wait for a socket timeout, after which the system falls back on using IPv4.
Either set
-Djava.net.preferIPv4Stack=true, which forces Java to use IPv4 instead, or you disable IPv6 entirely in the system. The proper fix is to allow IPv6 traffic from localhost to localhost.
For more information, see the Sun documentation:
http://java.sun.com/j2se/1.4.2/docs/guide/net/ipv6_guide/#ipv6-networking
|
|||
The BEA JRockit in Silent mode will not be correctly installed if the
USER_INSTALL_DIR in the XML-file has been set to anything other than the default installation path.
During the installation, the registry settings will not be set correctly, causing the
.jar file association to fail. The files Java.exe and Javaw.exe will not be copied to %SystemRoot%\System32 either.
|
|||
An issue running HP OpenView Java Diagnostics Profiling Agent may cause crashes with BEA JRockit R26.0.0.
|
|||
In rare cases BEA JRockit can print incorrect information about locks in the stack dump, given by the Ctrl-Break handler or by the Management Console/MAPI.
When a lock is taken by a method that has been optimized in a certain way (inlining), this lock can be printed as being taken, not only on the correct frame, but also as being taken on one or several nearby frames. This does not affect how BEA JRockit treats the lock when executing, only the stack dump itself.
|
|||
On Windows x64 and Itanium, when using the BEA JRockit JRE console mode installer to remove a previously installed BEA JRockit, the uninstall will be interrupted and the following message is displayed:
|
|||
A problem regarding the handling of TrueType fonts for certain font files may cause a call to
java.awt.Font.getXXX() methods that results in an IllegalArgumentException being thrown.
This problem has been reported to Sun as a problem found in Sun JDK 5.0 Update 4 in bug #6349101 (
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6349101). This problem can theoretically occur on all platforms but has been observed on RedFlag Linux Advanced Server 5.0 when the RPM package
ttfonts-zh_TW-5.0-2AX.noarch.rpm is installed and the user is requesting a font with Chinese locale.
Uninstall the package
ttfonts-zh_TW-5.0-2AX. This solves the problem but will at the same time remove those fonts from the system, which may cause other problems when trying to display Chinese text. If you try this, you should try to replace the use of the removed font with some other available font on the system.
|
|||
If
ulimit -v is used on Linux to limit the virtual memory usage, BEA JRockit may crash if the limit is set too low. The x64 version of BEA JRockit requires a much larger setting because it reserves addresses for compiled code at startup. The BEA recommendation is to not use the ulimit -v setting at all.
|
|||
BEA JRockit needs enough virtual memory (address space) to be able to run properly. Note that a high value on allowed virtual memory does not imply high memory consumption. On Linux, the amount of available virtual memory can be changed, typically by the command
ulimit -v <amount>.
The default is an unlimited address space, which is the recommended.Do not change this default, since it risks having BEA JRockit running out of address space, which in turn causes BEA JRockit to terminate immediately.
|
|||
Some applications may experience problems with the automatic nursery sizing heuristics when running in
-Xgcprio:throughput (default) and -Xgcprio:pausetime mode. This causes too frequently triggered garbage collections.
Set the nursery size manually using
-Xns:<size> or to select a static garbage collector.
The automatic heap resizing heuristics are not optimal for all applications. If your application has problems due to frequent garbage collections and the heap hasn’t been expanded to the maximum heap size, you can increase the initial heap size (
-Xms:<size>) to improve the performance.
|
|||
When doing a JRA recording on Windows XP x64, the JRA recording incorrectly displays that it has been done on Windows 2003 Server. The current implementation of BEA JRockit cannot separate between the two different operating system’s version information.
|
|||
Java applications (such as Eclipse) may hang on Linux distributions which use the “gamin” File Alteration Monitor implementation, for example RHEL4. This is due to a bug in gamin’s handling of signals.
Use “signal chaining” by loading the libjsig.so library. Do this by executing
> export LD_PRELOAD=$JDK_HOME/jre/lib/i386/libjsig.so before starting BEA JRockit.
For more information on signal chaining see:
http://java.sun.com/j2se/1.5.0/docs/guide/vm/signal-chaining.html
|
|||
BEA JRockit’s nursery pool can be invalidated when the garbage collection strategy changes. According to the Java 2 Platform SE API documentation, a pool that has been invalidated may return null. Programmers must therefore assume that
MemoryPoolMXBean#getUsage() and MemoryPoolMXBean#getPeakUsage() may return null at any time.
|
|||
The VerboseGC demo, located at
\demo\management\VerboseGC\VerboseGC.jar, can throw a NullPointerExcecption when used with a BEA JRockit that has a nursery.
|
|||
In Windows, faulting code can be caught by Structured Exception Handling (SEH). The Microsoft C compiler allows a special construct, see below:
This sets up an SEH handler, which would get called if the code in the
__try block fails (for example, a read/write to an illegal address).
However, on 64-bit Windows (IA64 and x64), BEA JRockit uses a new exception handling feature known as vectored exception handlers. The vectored exception handlers will be called before any SEH handler gets called. If the BEA JRockit vectored exception handler detects a fault in native code, it will make BEA JRockit produce a crash dump.
|
|||
|