A method, comprising: receiving, at a computing device, software expressed using one or more software-associated instructions to be compiled into machine-language instructions, wherein the software comprises a particular method call; performing a class hierarchy analysis of the software to determine a class hierarchy associated with the software using the computing device, the result of the class hierarchy analysis determining a deoptimization indicator for the particular method call, wherein the deoptimization indicator is modifiable at runtime; loading additional software into a runtime system of the computing device during runtime; updating the class hierarchy analysis to account for the additional software so as to determine an updated class hierarchy associated with both the software and the additional software, the result of the updated class hierarchy analysis determining whether to update the deoptimization indicator for the particular method call; determining whether the particular method call is to be checked for execution as a virtual method call based on the updated class hierarchy using the computing device; after determining that the particular method call is to be checked for execution as a virtual method call, the computing device determining one or more particular machine-language instructions comprising: one or more guarding machine-language instructions for performing a check of the deoptimization indicator to determine whether the particular method call is to be executed as a virtual method call; and one or more method-call machine-language instructions for the particular method call; and providing the one or more particular machine-language instructions to the runtime system of the computing device. receiving, at a computing device, software expressed using one or more software-associated instructions to be compiled into machine-language instructions, wherein the software comprises a particular method call; performing a class hierarchy analysis of the software to determine a class hierarchy associated with the software using the computing device, the result of the class hierarchy analysis determining a deoptimization indicator for the particular method call, wherein the deoptimization indicator is modifiable at runtime; loading additional software into a runtime system of the computing device during runtime; updating the class hierarchy analysis to account for the additional software so as to determine an updated class hierarchy associated with both the software and the additional software, the result of the updated class hierarchy analysis determining whether to update the deoptimization indicator for the particular method call; determining whether the particular method call is to be checked for execution as a virtual method call based on the updated class hierarchy using the computing device; after determining that the particular method call is to be checked for execution as a virtual method call, the computing device determining one or more particular machine-language instructions comprising: one or more guarding machine-language instructions for performing a check of the deoptimization indicator to determine whether the particular method call is to be executed as a virtual method call; and one or more method-call machine-language instructions for the particular method call; and providing the one or more particular machine-language instructions to the runtime system of the computing device. one or more guarding machine-language instructions for performing a check of the deoptimization indicator to determine whether the particular method call is to be executed as a virtual method call; and one or more method-call machine-language instructions for the particular method call; and providing the one or more particular machine-language instructions to the runtime system of the computing device.