Ich habe oft gehört , Entwickler erwähnt , dass Java nicht „ tun Echtzeit “, eine Java - Anwendung auf Linux bedeutet nicht die Anforderungen eines deterministischen Echtzeit - System gerecht zu werden , wie etwas läuft auf RIOT-OS usw.
Ich versuche zu verstehen warum . Mein SWAG sagt mir, dass dies wahrscheinlich größtenteils auf Javas Garbage Collector zurückzuführen ist, der jederzeit ausgeführt werden kann und das System vollständig anhält. Und obwohl es so genannte "pausenlose GCs" gibt, glaube ich nicht unbedingt an ihre Werbung und habe auch keine $ 80K-pro-JVM-Instanz für ein Hobby-Projekt!
Ich habe auch diesen Artikel über das Ausführen von Drohnen-Software unter Linux gelesen . In diesem Artikel beschreibt der Autor ein Szenario, in dem Linux seine Drohne fast zum Absturz gebracht hätte:
Nachdem ich mich für den Low Level Control Loop (PIDs) auf dem Pi entschieden hatte, lernte ich eine harte Lektion. Um klug zu sein, beschloss ich, ein Protokoll in die Mitte des Loops zu schreiben, um Fehler zu beheben. Das Quad flog zunächst einwandfrei, aber dann entschied sich Linux 2 Sekunden brauchen, um einen Logeintrag zu schreiben und der Quad ist fast gegen mein Auto gekracht!
Obwohl dieser Autor seine Drohnen-Software in C ++ geschrieben hat, würde ich mir vorstellen, dass eine Java-App, die unter Linux läuft, das gleiche Schicksal erleiden könnte.
Laut Wikipedia:
Ein System wird als Echtzeit bezeichnet, wenn die Gesamtkorrektheit einer Operation nicht nur von ihrer logischen Korrektheit abhängt, sondern auch von der Zeit, in der sie ausgeführt wird.
Für mich bedeutet dies also: " Sie haben keine Echtzeit, wenn die vollständige Korrektheit logische Korrektheit und Aktualität erfordert. "
Stellen wir uns vor, ich habe eine Java-App geschrieben, die überdurchschnittlich performant ist, und ich habe sozusagen "die Zitrone herausgepresst", und es könnte vernünftigerweise (in Java) nicht schneller sein.
Alles in allem ist meine Frage: Ich suche jemanden, der mir alle / die meisten Gründe erklärt, warum eine Java-App unter n Linux keine "Echtzeit-App" ist. Was sind also alle Kategorien von Dingen auf einem Java / Linux-Stack, die verhindern, dass er "aktuell" ist und daher " völlig korrekt "? Wie bereits erwähnt, sieht es so aus, als ob das Leeren von GC- und Linux-Protokollen die Ausführung unterbrechen kann, aber ich bin mir sicher, dass es außerhalb der Java-App noch weitere Dinge gibt, die zu einem schlechten Timing / einer schlechten Leistung führen und die Einhaltung strenger Fristen zur Folge haben. Was sind Sie?