While there are several design issues that determine how a message communication interface for Java is implemented, we considered mpiJava  for our work. mpiJava is an object-oriented interface to MPI that allows a Java program to access MPI entities such as objects, routines, and constants. While mpiJava relies on the existence of native MPI libraries, its API is implemented as a Java wrapper package that uses C bindings for MPI routines. In contrast, the reference implementation for MPJ , the Java Grande Forum's MPI-like message-passing API, will rely heavily on RMI and Jini for finding computational resources, creating slave processes, and handling failures; user-level communication will be implemented efficiently, directly on top of Java sockets, not a native MPI library. For mpiJava, when a Java application creates an object of the MPI class, mpiJava loads a native dynamic shared object ( libmpijava.so) in the address space of the Java Virtual Machine (JVM). This Java package is layered atop the native MPI library using the Java Native Interface (JNI) . There is a one-to-one mapping between Java methods and C routines. Applications are invoked using a script file prunjava that calls the mpirun application for distributing the program to one or more nodes.