Real-time systems tend to fit badly in a garbage collecting world. No matter how well a garbage collector performs, we still have a non-deterministic runtime overhead. Even if the latencies introduced by the GC are few and stopping the world completely is a rare event, a certain degree of non-determinism cannot be avoided.
So what do we mean by real-time? The terminology suffers from a certain degree of misuse. To avoid some of the confusion associated with real-time, we will divide the concept into hard real-time and soft real-time.
Hard real-time should be understood as the more traditional real-time system—perhaps a synthesizer or a pacemaker, a system where 100 percent determinism is an absolute requirement. There are few runtimes with automatic memory management that can work for this kind of environment, at least not without extensive modifications to the application and some kind of program language constructs for controlling...