A method for dynamically reallocating memory amongst virtual machines executing within a virtualization environment, the method comprising: identifying, by a memory manager executing on a computer, a maximum memory value, Mmax, (324, 334) and a minimum memory value, Mmin, (322, 332) for each virtual machine executing within a virtualization environment of the computer; determining, by the memory manager using the identified maximum and minimum memory values, Mmax and Mmin, (324, 334, 322, 332), a target memory value, Mtarget, for each virtual machine of the virtualization environment; identifying, by the memory manager, at least one virtual machine having an actual memory usage value less than the target memory value, Mtarget, for the at least one virtual machine; allocating, by the memory manager responsive to identifying the at least one virtual machine, additional memory to the at least one virtual machine by inflating a balloon driver until the actual memory usage value of the at least one virtual machine substantially equals the target memory value for the at least one virtual machine; de-allocating, by the memory manager responsive to allocating the additional memory, the additional memory from the at least one virtual machine by deflating the balloon driver upon determining the actual memory usage value of the at least one virtual machine substantially equals the target memory value for the at least one virtual machine; and reallocating, responsive to de-allocating the additional memory, the de-allocated memory to another virtual machine executing within the virtualization environment; characterised by: calculating, by the memory manager, a host compression ratio, HCR; and calculating, by the memory manager, the target memory value, Mtarget, using the equation: Mtarget = HCR × Mmin + 1 − HCR × Mmax. identifying, by a memory manager executing on a computer, a maximum memory value, Mmax, (324, 334) and a minimum memory value, Mmin, (322, 332) for each virtual machine executing within a virtualization environment of the computer; determining, by the memory manager using the identified maximum and minimum memory values, Mmax and Mmin, (324, 334, 322, 332), a target memory value, Mtarget, for each virtual machine of the virtualization environment; identifying, by the memory manager, at least one virtual machine having an actual memory usage value less than the target memory value, Mtarget, for the at least one virtual machine; allocating, by the memory manager responsive to identifying the at least one virtual machine, additional memory to the at least one virtual machine by inflating a balloon driver until the actual memory usage value of the at least one virtual machine substantially equals the target memory value for the at least one virtual machine; de-allocating, by the memory manager responsive to allocating the additional memory, the additional memory from the at least one virtual machine by deflating the balloon driver upon determining the actual memory usage value of the at least one virtual machine substantially equals the target memory value for the at least one virtual machine; and reallocating, responsive to de-allocating the additional memory, the de-allocated memory to another virtual machine executing within the virtualization environment; characterised by: calculating, by the memory manager, a host compression ratio, HCR; and calculating, by the memory manager, the target memory value, Mtarget, using the equation: Mtarget = HCR × Mmin + 1 − HCR × Mmax. calculating, by the memory manager, a host compression ratio, HCR; and calculating, by the memory manager, the target memory value, Mtarget, using the equation: Mtarget = HCR × Mmin + 1 − HCR × Mmax.