1. A data processing system comprising: at least one data processor; and at least one non-transitory memory including computer program code, wherein the at least one processor, in response to execution of the computer program code, is configured to comprise: a plurality of virtual machines each having associated memory pages; a shared memory page cache that is accessible by each of the plurality of virtual machines; and a global hash map that is accessible by each of the plurality of virtual machines; where for a particular memory page stored in the shared memory page cache that is accessed by two or more of the plurality of virtual machines there is a single key stored in the global hash map that uniquely identifies at least a storage location in the shared memory page cache of the particular memory page enabling page de-duplication to be achieved.