1. A computer-implemented method for optimizing object oriented programs using limited customization comprising: determining whether a virtual function is compiled for a first receiver class associated with the virtual function; if it is determined that the virtual function is not already compiled for the first receiver class, determining whether to customize the virtual function having the associated first receiver class; generating, if it is determined to customize the virtual function, a customized version of the virtual function having one or more devirtualized function calls of the virtual function; storing an entry for the customized version of the virtual function in a virtual table associated with the first receiver class, wherein the virtual table stores an entry point of the virtual function that is not customized; and executing the customized version of the virtual function for an object of the first receiver class based on the stored entry in the virtual table associated with the first receiver class, wherein the determining, the generating, the storing, and the executing are performed using one or more computing devices.