HP-UX Programmer's Guide for Java 2

Table Of Contents
NOTE: The default stack size for 1.4 and 5.0 64-bit mode threads created by the JVM
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, for threads created
using the pthread library, you will want to adjust the stack size to avoid overflows.
For further details on thread stack size limits, see “Main/primordial thread stack size
limits” (page 57) and “Non-Main/Primordial thread stack size limits” (page 59).
Replacing the C++ default global allocation and deallocation functions
If your application provides its own new and delete operators, be aware that as a result
of dynamic linking, the JVM will now call your implementation of the operators instead
of the standard implementation. If you wish to override the new, new[], delete, and
delete[] operators inside your application or library but prevent other libraries, such
as the JVM, from calling your implementation, you can explicitly hide your operator
symbols by using the following options on the aCC compile line:
aCC -Bhidden=_ZdaPv,_ZdaPvRKSt9nothrow_t,_ZdlPv,_ZdlPvRKSt9nothrow_t \
-Bhidden=_Znam,_ZnamRKSt9nothrow_t,_Znwm,_ZnwmRKSt9nothrow_t ...
Input to the -Bhidden option are mangled C++ operator names; these names can be
deciphered with the c++filt command. The -Bhidden option is only available on
Integrity systems. For PA-RISC systems, the following can be added to the aCC link
line:
aCC -b -Wl,-h__nw__FUl,-h__dl__FPv ...
Java™ calling a native (non-Java) method
The first capability that JNI provides is to allow Java™ running under the Java™ Virtual
Machine (JVM) to make native method calls. This allows the Java™ programmer to
supply a native implementation instead of a Java™ implementation for any method
in any user defined class. The Java™ keyword native is used in the declaration of the
method and no body or definition is supplied in the Java™ source.
native void sample(int x, int y);
The above declares a non-static native method named "sample" which returns a void
and it accepts two integers as parameters.
The native method must be implemented in C or C++. When using C++ native methods
special care must be taken to properly initialize the C++ runtime before transferring
control to any C++ native method. For the HP C++ compiler this means that the routine
_main must be called before transferring control to any C++ method. The examples
below detail a mechanism for ensuring that the C++ runtime is properly initialized.
All Java™ native methods must reside in a shared library. This implies that the native
methods must be built using the +z or +Z compiler options. These options cause the
compiler to generate PIC (Position-Independent-Code). The shared library containing
the native method implementation is dynamically loaded during execution of the Java™
46 Using Java™ 2 JNI on HP-UX