A distributed Java Virtual Machine supports transparent parallel execution of multi-threaded Java programs on a cluster of computers. It provides an alternative platform for high performance scientific computations. In this paper, we present the design of a global object space in distributed JVM, which virtualizes a single Java object heap across machine boundaries to facilitate transparent object accesses. We leverage runtime object connectivity information to detect objects, called distributed-shared objects, that are reachable from threads at different nodes to address memory consistency issues in the distributed JVM. With the detection of distributed-shared objects, we can reduce memory consistency maintenance overhead and provide efficient distributed garbage collection.We propose a framework to characterize object access patterns, along three orthogonal dimensions. Under the framework, we propose and apply three effective adaptations to the cache coherence protocol to optimize several access patterns that frequently appear during application execution, including an object home migration method that adapts to the single-writer access pattern, synchronized method migration that allows the remote execution of a synchronized method at the home node of its locked object, and object pushing that uses the object connectivity information to adapt to the producer-consumer access pattern.