1. A method for optimization, by a compiler of an object-oriented language, of computer executable instructions associated with a non-final object that is a call parameter to a virtual procedure at a call site comprising the steps of: a) devirtualizing the call site of the virtual procedure; b) adding computer executable instructions for privatizing the object before the devirtualized call site; c) creating a guard assumption for the devirtualized call site associated with the object; and d) applying optimization to computer executable instructions associated with the object within the devirtualized call site.