As part of the JavaParty project at the University of Karlsruhe, Germany, described in section 2.3.1, a more efficient RMI and object serialization has been studied. Philippsen et al [#!PHILIPPSEN98!#] describe detailed analysis of RMI and object serialization and it's performance problems. They also suggest modifications to improve RMI and object serialization. Based on these suggestions, they implemented more efficient version of RMI and object serialization called KaRMI and UKA-serialization. KaRMI [#!NESTER99!#] improves the performance of RMI by clean interfaces between layers and the separation of RMI's design from transport level sockets. They also modify RMI to support non-TCP/IP communication networks. KaRMI cannot handle code that uses socket factories or port numbers. UKA-serialization [#!PHILIPPSEN99!#] uses explicit marshalling/unmarshalling routines instead of reflection and a minimal encoding of type information to achieve better performance.
Henri Bal's group of Vrije University, Netherlands, study an alternative approach for implementing RMI, called MantaRMI [#!MAASSEN99!#], based on native compilation for better optimization. Manta [#!MANTA99!#] is compiler-based Java system and uses a native compiler that generates executable code rather than byte code. The Manta system supports two different communication protocols. Between Manta nodes, it can communicate through Manta's own a fast RMI protocol using Manta's own serialization format. A Manta node can communicate with another JVM through a JDK-compliant protocol using Sun's serialization format. With Manta, the serialization code is generated by the compiler which make it possible to avoid the overhead of dynamic inspection of the object structure.
Krishnaswamy et al [#!KRISHNASWAMY98!#] improve RMI performance by adding object caching at the reference layer and using UDP (User Datagram Protocol)-based reliable message delivery protocol.
Another implementation of RMI is provided by Thiruvathukal et al. em Reflective RMI (RRMI) [#!RRMI98!#] adopted the reflection feature of Java programming language to invoke remote methods. RRMI makes it possible of use RMI without stubs and skeletons. A remote object is created dynamically at the run time by implementing its own class loader on the server side. It also supports both synchronous and asynchronous remote method invocations.
Raje et al implement ARMI (Asynchronous RMI) [#!RAJE!#] which adds an asynchronous remote method to RMI. It achieves asynchronous communication by replacing the RMI client-side stub, adding a thread mechanism.
NexusRMI [#!BREG98a!#] implements Java RMI on top of NexusJava [#!NEXUSJAVA!#], which is a Java interface to the Nexus communication system developed at Argonne National Laboratory. NexusRMI also has support for object serialization of all object types except for exception objects.
At the University of California, Berkeley, NinjaRMI [#!WELSH!#] has been developed to support Ninja project [#!NINJA!#]. NinjaRMI has some features that are not found in Sun's RMI including multiple communication protocols.