J'ai souvent entendu des développeurs mentionner que Java ne peut pas " faire en temps réel ", ce qui signifie qu'une application Java fonctionnant sous Linux ne peut pas répondre aux exigences d'un système déterministe en temps réel, comme quelque chose s'exécutant sur RIOT-OS, etc.
J'essaie de comprendre pourquoi . Mon SWAG me dit que cela est probablement dû en grande partie au Garbage Collector de Java, qui peut s'exécuter à tout moment et interrompre totalement le système. Et bien qu'il existe des soi-disant «GCs sans pause», je ne crois pas nécessairement leur publicité, et je n'ai pas non plus 80 000 $ par instance JVM à débourser pour un projet de loisir!
Je lisais également cet article sur l'exécution de logiciels de drones sous Linux . Dans cet article, l'auteur décrit un scénario où Linux a failli faire planter son drone dans sa voiture:
J'ai appris une dure leçon après avoir choisi de faire la boucle de contrôle de bas niveau (PID) sur le Pi - en essayant d'être intelligent, j'ai décidé de mettre une écriture de journal au milieu de la boucle pour le débogage - le quad a d'abord bien volé mais Linux a ensuite décidé de prendre 2 secondes pour écrire une entrée de journal et le quad s'est presque écrasé dans ma voiture!
Maintenant, bien que cet auteur ait écrit son logiciel de drone en C ++, j'imagine qu'une application Java fonctionnant sous Linux pourrait très bien subir le même sort.
Selon Wikipedia:
Un système est dit en temps réel si l'exactitude totale d'une opération dépend non seulement de son exactitude logique, mais également du temps dans lequel elle est effectuée.
Donc, pour moi, cela signifie " Vous n'avez pas en temps réel si l'exactitude totale nécessite une exactitude logique et une ponctualité. "
Imaginons que j'ai écrit une application Java pour être super performante, et que j'ai "pressé le citron" pour ainsi dire, et qu'elle ne pouvait raisonnablement pas être écrite (en Java) pour être plus rapide.
Dans l'ensemble, ma question est: je cherche quelqu'un pour m'expliquer toutes / la plupart des raisons pour lesquelles une application Java exécutant n Linux ne serait pas une "application en temps réel". Autrement dit, quelles sont toutes les catégories de choses sur une pile Java / Linux qui l'empêchent "d'être opportune", et donc d'être " totalement correcte "? Comme mentionné, il semble que la purge des journaux GC et Linux puisse suspendre l'exécution, mais je suis sûr qu'il y a plus de choses en dehors de l'application Java elle-même qui pourraient entraîner un mauvais timing / performances et la faire respecter des contraintes de délais strictes. Que sont-ils?