1. A method of simulating a program comprising: determining if compiled data is stored at an address in a memory table, in response to a request from a simulator at run-time for compiled data of a given instruction; compiling said given instruction and storing said given compiled data of said given instruction at said address in said memory table, if said compiled data is not stored at said location in said memory table; determine if said given instruction, has changed from a previous execution of an instruction having compiled data at said address in said memory table, if said compiled data is stored in said location in said memory table; re-compiling said given instruction to generate compiled data of said given instruction and storing said compiled data of said given instruction at said location in said memory table, if said given instruction has changed from said previous execution of said instruction having compiled data at said address in said memory table and if said address in said memory table is not protected from being overwritten, wherein said compiled instructions in said memory table are individually protected or unprotected from being overwritten; and returning said compiled data of said given instruction or a reference thereto to said simulator.