1. A method of predicting a hardware and/or software metric associated with a computer system, said method comprising the steps of: providing a system, wherein the system comprises distinct software modules, each of the distinct software modules being embodied on a tangible computer-readable recordable storage medium, and wherein the distinct software modules comprise a selecting module, a processing module, a predicting module, and a data input module; dynamically choosing an objective function from a pool of available objective functions, by executing said selecting module on at least one hardware processor; dynamically choosing a prediction model from a pool of available prediction models, by executing said selecting module on said at least one hardware processor; locating points of inflection for said objective function chosen in said step of choosing said objective function, based on past values of said metric, to obtain a set of equations that can be solved to obtain model parameters associated with said prediction model chosen in said step of choosing said prediction model, said locating being carried out by executing said processing module on said at least one hardware processor; solving said equations to obtain said model parameters, by executing said processing module on said at least one hardware processor; predicting a future value of said metric, based on (i) at least some of said past values of said metric and (ii) said prediction model chosen in said step of choosing said prediction model, with said associated model parameters determined in said solving step, by executing said predicting module on said at least one hardware processor; obtaining a true future value of said metric by executing said data input module on said at least one hardware processor; and repeating, for a next time step, said steps of choosing said objective function, said choosing said prediction model, and said locating said points of inflection for said objective function, with said true future value of said metric included in said past values of said metric; wherein said dynamic choosing of said objective function comprises the sub-steps of: evaluating performance of each objective function in said pool of objective functions based on past values of said metric for a given one of said models, by executing said selecting module on said at least one hardware processor; and if any of said objective functions in said pool outperforms a current one of said functions in said evaluating step, updating said chosen objective function to said function which outperforms said current function, by executing said selecting module on said at least one hardware processor.