Mit Ausnahme des Garbage Collectors: Welche anderen Funktionen in Java sind für die Echtzeitprogrammierung ungeeignet? Im Internet wird immer dann, wenn Java gegen C ++ in Bezug auf die Echtzeitprogrammierung diskutiert wird, der Garbage Collector erwähnt. Gibt es noch etwas?
java
c++
garbage-collection
real-time
Kaushik
quelle
quelle
Antworten:
Es gibt zwei zusätzliche Dinge, an die ich mich sofort erinnern kann:
In Echtzeit ist die Vorhersagbarkeit der Leistung wahrscheinlich der wichtigste Faktor. Aus diesem Grund ist Java aufgrund eines unvorhersehbaren GC-Zyklus nicht für Echtzeit geeignet.
JIT bietet eine verbesserte Leistung, wird jedoch zu einem bestimmten Zeitpunkt nach der Ausführung des Programms aktiviert, beansprucht einige Ressourcen und ändert die Ausführungsgeschwindigkeit des Systems. Es kann auch zu einem späteren Zeitpunkt wieder vorkommen, wenn die VM glaubt, dass sie zu diesem Zeitpunkt einen "besseren" Job machen kann.
Zum Thema Threading: Ich kann mich noch nicht genau erinnern, ob dies Teil des Sprachentwurfs oder nur eine sehr häufige Implementierung ist, aber Java bietet normalerweise keine Tools zur präzisen Steuerung der Thread-Ausführung. Während beispielsweise 10 "Prioritäten" für Threads angegeben sind, muss die VM diese Prioritäten nicht berücksichtigen. Operatoren zum Stoppen und Wechseln von Threads sind ebenfalls entweder nicht definiert oder werden vom System nicht starr eingehalten.
Es gibt verschiedene Implementierungen von JSR 1: Echtzeitspezifikation für Java - eine Spezifikation, die 1998 genehmigt wurde. Diese Spezifikation behebt so weit wie möglich die Probleme, die Standard-Java für Echtzeit ungeeignet machen.
Vor vielleicht 5 Jahren hatte Sun (Now Oracle) eine RTSJ-VM (That never had a name, AFAIK). IBM hatte WebSphere Real Time; Und JamaicaVM war eine kostenlose (?), Plattformunabhängige Lösung. Wer heute googelt, bringt nicht viel.
quelle
Das Betriebssystem
Solange Java auf Unix oder Windows oder einem anderen "normalen" Betriebssystem ausgeführt wird, kann keine Echtzeit garantiert werden.
Ein Echtzeitbetriebssystem ist für die Ausführung von Echtzeitanwendungen obligatorisch.
quelle
Technisch ist es möglich, Java in Echtzeit zu haben (wie aus den Kommentaren von SK-logic hervorgeht). Es ist jedoch aus einer Reihe von nicht technischen Gründen nicht üblich:
Alte Standards
Ich habe Probleme, eine Referenz dafür zu finden, aber ich bin sicher, dass ich Sicherheitsstandards oder Ratschläge zur Konformität mit Sicherheitsstandards gesehen habe, die Java pauschal verbieten. Zu Recht oder zu Unrecht, wenn Sie sich an etwas halten müssen, das sagt, dass Java verboten ist, dann ist Java Verboten.
Alte Sicherheitsingenieure
Selbst wenn die Standards, nach denen Sie arbeiten müssen, um Java nicht zu verbieten, die Arbeit mit Sicherheits- / Qualitätsprüfern ohne Java-Erfahrung bedeuten, dass Sie nicht den Weg des geringsten Widerstands beschreiten. Alles, was für den Prüfer ungewöhnlich ist, wird wahrscheinlich viele Fragen aufwerfen, was wiederum eine Menge Arbeit für Sie bedeutet, um Ihre Entscheidungen zu rechtfertigen.
Die Gemeinde
Das heißt, es besteht eine große Pfadabhängigkeit. Die meisten aktuellen Echtzeitexperten kennen C ++, C oder ADA in- und auswendig, sodass es eine natürliche Wahl ist, neue Aufgaben zu erledigen.
(Anmerkung: Ich habe Echtzeit und Sicherheit in den obigen Punkten in gewisser Weise in Konflikt gebracht, was ein weiteres Problem darstellt, da selbst Sicherheitsstandards häufig die beiden Aspekte in Konflikt bringen.)
quelle