Sharing selected data structures among virtual machines of a safe language can improve resource utilization of each participating run-time system. The challenge is to determine what to share and how to share it in order to decrease start-up time and lower memory footprint without compromising the robustness of the system. Furthermore, the engineering effort required to implement the system must not be prohibitive. This paper demonstrates an approach that addresses these concerns in the context of the JavaTM virtual machine. Our system transforms packages into shared libraries containing classes in a format matching the internal representation used within the virtual machine. We maximize the number of elements in the read-only section to take advantage of cross-process text segment sharing. Non-shareable data are automatically replicated when written to due to the operating system's streamlined support for copy-on-write. Relying on the existing shared libraries manipulation infras...