The advantages of object-oriented programming systems are well known. However, in general, they do not support long-lived objects, nor do they allow concurrent sharing or dynamic re-use of language defined objects. Persistent object systems address some of these shortfalls. In this paper we present a design and implementation of a persistent object system that uses memory-mapping to directly map objects from the persistent store into the address space of user programs. Memory mapping makes the management and manipulation of persistent objects simpler. In particular, complex object structures can be executed (shared) concurrently on behalf of separate applications. A simple language extension has been designed and added to C++ to make the programming of persistence, sharing, synchronization and consistency control expressible. With efficient run-time support for persistent pointer resolution and consistency maintenance, this approach can provide much finer-grain execution concurrency and sharing, easier object navigation, simpler programmability and possibly better performance, than object-oriented database systems.