The currently specified communication API for mpjdev is small compared to MPI. It only includes point-to-point communications. The sophisticated data types of MPI are omitted. This is a fairly major change relative to MPI, but for now it seems hard to make progress in Java while pursuing the HPC ideal of messaging with ``zero-copying''--something the derived data types of MPI were designed to facilitate. Avoiding internal copying of message buffers would require changes to the implementation of some of the most popular Java Virtual Machines. This is outside our control.
So in mpjdev we revert to a less demanding scheme in which data is locally copied at least once--between the Java program's memory space and a system-managed message-buffer. There is explicit packing and unpacking of buffers--a similar strategy to new I/O package of the Sun JDK version 1.4--but we provide a specialized set of gather/scatter buffer operation to better support HPC applications. Much of the complexity in the mpjdev API is then associated with packing and unpacking of message buffers. Because we want to make sure that usually data need be copied locally at most once, we provide a flexible suite of operations for copying data to and from the buffers. These include assorted gather- and scatter-style operations.