RMI (Remote Method Invocation) allows objects to reside remotely and have their methods invoked from another Java Virtual Machine. An RMI application typically has a server that creates remote objects and makes them accessible, and a client that obtains references to remote objects and invokes their methods. RMI handles communication between remote objects, making remote calls appear similar to local method calls. It also loads class definitions as needed to allow objects to be passed between VMs.