Remote Method Invocation (RMI) allows Java objects to invoke methods on remote Java objects located on other hosts or machines. RMI uses stubs and skeletons as proxies to make remote calls appear local. The stubs act as local representatives for remote objects, while skeletons on the remote host receive the calls and forward them to the actual remote objects. RMI handles object serialization and deserialization to transfer objects between clients and servers.