ABSTRACT

Since its inception in the early 1990s, there is little doubt that Java has been a great success. However, the language does have serious weaknesses both in its overall model of concurrency and in its support for real-time systems. Consequently, it was initially treated with disdain by much of the real-time community. Nevertheless, the perceived advantages of Java (from a software engineering perspective) over languages like C and C++, coupled with the failure of Ada to make strong inroads into the broad real-time and embedded system markets, resulted in several attempts to extend the language so that it is more appropriate for a wide range of real-time systems. The simplest extension was Real-Time Java Threads (Miyoshi et al., 1997), which provided rudimentary real-time support. Another proposal was Portable Executive for Reliable Control (PERC) (Nilsen, 1998) that provided both high-level abstractions for real-time systems and low-level abstractions to access the hardware (included is real-time garbage collection). In Communication Threads for Java (Hilderink, 1998), an approach was proposed that was based on the CSP algebra, the Occam2 language, and the Transputer microprocessor. Others attempted to integrate the Java Virtual Machine (JVM) into the operating system (e.g., GVM [Back et al., 1998]) or to provide a hardware implementation of the JVM (e.g., picoJava-I [McGhan and O’Connor, 1998]).