The real-time specification for Java (RTSJ) established real-time extensions for the Java system. From RTSJ, a hundred flowers have bloomed, each designed to orient RTSJ to a particular niche in the real-time ecosystem. Enough time has passed to see patterns developing, leading to efforts to group related patterns into a framework providing consistent and convenient access to common properties. Flexotask, the flexible task graphs model described in this paper, is one such framework.
Flexotask unifies four models into a restricted thread programming model for programs with real-time constraints tighter than those possible with real-time garbage collection. Flexotask tools ensure memory operation safety guarantees by verifying bytecode against type constraints, eliminating the runtime memory checks required by RTSJ scoped memory. Atomic methods or immutable objects allow nonblocking communication between time-constrained tasks and time-oblivious code; bytecode rewriting provides atomicity without programmer effort. Flexotask also supports roll-forward transaction logs for multiprocessors.
A 10-kilohertz (kHz) reading benchmark shows Flexotask to be predictable with a few microsecond (µs) jitter and all tasks scheduled within 40 µs of the period. A collision detection benchmark shows Flexotask to be fast, relative to RTSJ, and imperturbable, relative to Java with or without special garbage collectors.
The paper is well written, with enough background for those who are familiar, but not current, with Java real-time systems.