Except the garbage collector, what are some other features in Java that make it unsuitable for real time programming? On the net, whenever Java vs C++ is discussed with regards to real time programming, it is always the garbage collector that is mentioned. Is there anything else?
Java Real-Time Programming – Beyond Garbage Collection
cgarbage-collectionjavareal time
Related Topic
- Java – Understanding the Garbage Collector in Java
- C# Real-Time Code – Optimizations for Soft Real-Time Systems
- Memory Management – When to Force Garbage Collection?
- Java Linux – Reasons Why a Java/Linux Stack Fails to Be Real-Time
- Java Garbage Collection – Readability vs Performance in Data Structure Management
- Garbage Collection – How It Works in Natively Compiled Languages
Best Answer
There are two additional items I can remember off-hand:
In term of real-time, predictability of performance is probably the most important factor; That's why an unpredictable GC cycle makes Java unsuitable for real-time.
JIT offers improved performances, but kicks in at some point after the program is running, taking some resources, and changing the execution speeds of the system. It can also happen again at a later stage, if the VM believes it can do a "better" job at that time.
As far as threading: I don't quite remember at this point if this is part of the language design, or just a very common implementation, but Java usually provides no tools to precisely control thread execution; For example, while there are 10 "priorities" specified for threads, there's no requirement that the VM actually considers these priorities. Operators for stopping and switching threads are also either not defined, or not rigidly adhered to by the system.
There are several implementations of JSR 1: Real-time Specification for Java - a spec that has been approved in 1998. This spec addresses as much as possible of the issues that makes standard Java unsuitable for real-time.
As of maybe 5 years ago, Sun (Now Oracle) had a RTSJ VM (That never had a name, AFAIK); IBM had WebSphere Real Time; And JamaicaVM was a free(?), platform-independent solution. Googling those today doesn't bring much.