1. A method of managing a distributed-memory parallel application running on multiple physical servers, comprising: dynamically moving a plurality of executable program components, said plurality of executable program components running on one of a plurality of virtual machines, said moving using migration of the virtual machines between physical servers; dynamically load balancing at an application level to work in conjunction with said moving a plurality of executable program components; partitioning the distributed-memory parallel application among specific ones of said executable program components based on application-defined partition boundaries; packaging said executable program components into one of said plurality of virtual machines; assigning each of said plurality of virtual machines to one of the physical servers according to a deployment strategy; and monitoring an operation of each virtual machine of said plurality of virtual machines, said monitoring comprising determining if there is an imbalance in a workload of each of the physical servers, determining whether application performance can be improved, determining whether a communication latency between virtual machines is reduced, determining whether current virtual machine assignment violates administrative policy, wherein if there is an imbalance in said workload of each of the physical servers, at least one of said virtual machines is migrated from a first physical server to a second physical server to balance the workload, wherein if at least one of the physical servers is overloaded, a new physical server is added to the multiple physical servers, and at least one of said virtual machines, from an overloaded physical server, is migrated to said new physical server, wherein if at least one of the physical servers is underloaded, at least one of said virtual machines is migrated and at least one of the physical servers is removed, and wherein said at least one of the physical servers that is removed is allocated to another application, said another application comprising a distributed-memory application comprising a plurality of executable program components running on one of a plurality of virtual machines.