Gini project does remote method invocation by generating bytecode for remote object proxies on the fly. Primitive types, arrays of primitive types (arrays of arrays of prim. types, and so on), as well as strings, are passed by value. Reference types, as well as arrays of reference types are passed by reference in remote calls.
Exceptions are dealt with separately - and in such a way as to allow propagation of stack-traces (which Sun's RMI doesn't do.) There is no object serialization - it's purely remote method invocation. Garbage collection is a hack, but seems to work. Make sure you've got weak references on the platform you are using.
The Gini Lookup Service provies a registry into which any machine on the network can stuff objects. A Gini node either finds an already-running Lookup Service on the network or starts advertising itself (by using UDP broadcast) as such. You can be notified whenever a lookup service is found or lost, or when an object is added to or removed from the registry. If there are two Gini nodes advertising themselves at one point, they'll decide which one stops.
The implementation compiles to a less than 50k jar, and the bytecode library it uses is less than 90k. A good use of it is for distributed computing, actually. But if you feel like playing with embedded devices, go ahead.a