Remote Method Invocation (RMI) allows objects to communicate between different computers in an object-oriented manner. RMI uses stubs and skeletons so that a client can invoke methods on remote objects hosted on a different machine, with the arguments and return values being serialized and transmitted over the network. Developers must design interfaces for remote services, implement those services, and start a registry and server to bind and look up remote objects that clients can then invoke.