Distributed JVM systems enable concurrent Java applications to transparently run on clusters of commodity computers by supporting Java’s shared-memory model over multiple JVMs distributed across the cluster’s computer nodes. In this work, we developed and evaluated selective dynamic diffing and lazy home allocation, two new techniques that enable distributed JVMs to efficiently support memory sharing across the cluster. Specifically, the two techniques whether in isolation or in combination can reduce the overheads due to message traffic, extra memory space, and high latency of remote memory accesses that such distributed JVM systems require to enforce memory coherence. To evaluate the performance-related benefits of dynamic diffing and lazy home allocation, we implemented both techniques in CoJVM (Cooperative JVM), a distributed JVM system we developed in previous work. We carried out a performance comparison between basic CoJVM and CoJVM versions that used our proposed techniques...