1. A computer implemented method for optimizing compilers, said method comprising: under the control of one or more computer systems configured with executable instructions, executing a user application on behalf of at least one user, the user application being executed using a set of shared resources in a multi-tenant computing environment, the set of shared resources also executing a plurality of other applications on behalf of one or more other users; collecting runtime information for the set of shared resources in the multi-tenant computing environment, the runtime information including at least data associated with a cache that is shared between the user application and at least one of the plurality of other applications, the data indicating that an available amount of cache space of a first cache on a computing device is below a threshold amount of cache space; providing the collected runtime information to a profile-driven compiler; recompiling source code of the user application by the profile-driven compiler based at least in part on the runtime information in order to produce an optimized version of the user application, the optimized version having at least one improved performance parameter when being executed on the set of shared resources, the at least one improved performance parameter including using a second cache with a size less than the first cache; and executing the optimized version of the user application on the set of shared resources in the multi-tenant computing environment.