One of the consequences of this fine grained behavior is that there is usually a lot of interaction between objects, and that that interaction usually requies lots of method invocations. Within a single address space, this is no great issue. Method calls are cheap these days, and clever compilers and VMs can eliminate even this small cost. In the very few cases where it does make a difference, it's a small job to optimize. But this happy state does not exist when you make calls between processes.
Remote calls are much more expensive because there is a lot more to do.
Data may have to be marshalled, security may need to be checked, packets may need to be routed through switches. If the two proceses are running on machines on opposite sides of the globe, the speed of light may be a factor. Such a performance effect cannot be ignored, even for us belivers in lazy optimization. As a result any object that's intended to be used as a remote object needs a coarse grained interface that minimizes the amount of calls needed to get something done. Not just does this affect your method calls, it also affects your objects.