1. A method for allocating virtual machines to support changing computing resource requirements of an application over time, the method comprising: generating a prediction of future virtual machine utilization for the application based upon past resource utilization statistics; receiving resource utilization statistics from a set of virtual machines currently supporting the application; adjusting the prediction using the received resource utilization statistics; and transmitting instructions relating to provisioning virtual machines for the application in accordance with the adjusted prediction.