Several attempts have been made to create “execution environments” in which certain types of computer programs are executed. In general, a conventional execution environment provides support for basic features that many programs assume are available for use. For example, conventional execution environments typically include support for performing various mathematical functions (such as sine and cosine operations), input/output functions (such as reading and writing files), and communication functions (such as network and database access). Some conventional execution environments provide additional functionality, such as just-in-time compilation of code, machine independence and portability, remote operation, and enhanced internetworking. Just-in-time compilation refers to the compilation of code that is performed when execution of the code is requested for the first time. Conventional execution environments that support these additional functions are generally referred to as “virtual machines.” The Common Language Infrastructure (CLI) by MICROSOFT CORPORATION and JAVA by SUN MICROSYSTEMS are examples of execution environments.
Conventional execution environments often support the management of memory used during execution of computer programs. Memory is typically a finite resource needing careful management so that programs needing memory can obtain it when necessary. There are often several types or classes of memory in an execution environment, including a “heap memory” or “heap”. The heap typically represents memory that is highly dynamic in its use, meaning that heap memory is frequently allocated to programs that use it for a short time and then return it for reuse by other programs. A “heap manager” often controls when and how the heap memory is used by the computer programs.
In some execution environments, programs that request the use of heap memory may not explicitly return it when their use of the heap memory is complete. In these execution environments, the heap manager often automatically determines when heap memory is no longer being used by a program that requested it. The heap manager then reclaims the identified heap memory, allowing the heap manager to allocate the identified memory to another program. This function is typically referred to as “garbage collection.”
A problem with conventional execution environments is that they are not deterministic in nature. The term “deterministic” generally refers to the ability to predict or specify the behavior of a program or environment. Conventional execution environments are not deterministic because they typically suffer from occasional and unpredictable delays, including delays associated with the functions performed by the heap manager. These delays represent non-deterministic behavior in the conventional execution environments.
This typically makes these execution environments unsuitable for use with real-time applications. Real-time applications may represent programs that interact with an outside environment or otherwise operate in a way that is carefully timed. The non-deterministic behavior of conventional execution environments often translates into or causes non-deterministic behavior in the execution of real-time applications. As a result, the real-time applications often cannot maintain their exact time schedules when executed in conventional execution environments, which causes the real-time applications to fail.