Patent ID: 7080366
Filing Date: 2006-07-18
Classification: G06F,Y10S

Abstract:
1. A dynamic compiler, comprising: an execution history recorder configured to record a fragment of code and the number of times the fragment of code is executed; the execution history recorder having an interpreter, a compiler manager coupled thereto and a threshold number of executions for a threshold comparison with a recorded number of times to determine a dominant path having a fragment to be compiled therein; a compiler queue of fragments to be compiled for receiving the fragment to be compiled and a successor fragment wherein the successor fragment is determined by the execution history recorder to be the most likely next fragment to be executed after the fragment to be compiled in accordance with a list of successor fragments and a count associated with each successor fragment in the list of successor fragments; a compiler coupled to the compiler queue and arranged (i) to receive a received fragment to be compiled and the corresponding successor fragment of the received fragment to be compiled, and (ii) to create a compiled dominant path from the received fragment to be compiled, the corresponding successor fragment being compiled in accordance with its correspondence with the fragment to be compiled and independently of whether the number of executions of the corresponding successor fragment has reached the threshold number of executions; the execution history recorder being further configured to record from where a transfer of control into the compiled dominant path came and to where control is transferred out of the compiled dominant path; a queue duration determination including (i) a determination whether the length of the compiler queue has exceeded a predetermined length and (ii) a determination whether the predetermined queue length has been exceeded for a predetermined period of time; a threshold tuner operable to adjust the threshold number of the execution history recorder in accordance with the queue duration determination to maintain the number of fragments to be compiled within predetermined limits; and the compiler manager having a memory manager to make compilation more likely for fragments of code reaching the threshold relatively more times than for fragments of code reaching the threshold relatively fewer times by entering the fragments to be compiled into the same end of the compiler queue from which they are taken.