À l'exception du garbage collector, quelles sont les autres fonctionnalités de Java qui le rendent inapproprié pour la programmation en temps réel? Sur le net, chaque fois que Java vs C ++ est discuté en ce qui concerne la programmation en temps réel, c'est toujours le garbage collector qui est mentionné. Y a-t-il autre chose?
java
c++
garbage-collection
real-time
Kaushik
la source
la source
Réponses:
Il y a deux éléments supplémentaires dont je me souviens spontanément:
En termes de temps réel, la prévisibilité des performances est probablement le facteur le plus important; C'est pourquoi un cycle GC imprévisible rend Java impropre au temps réel.
JIT offre des performances améliorées, mais intervient à un moment donné après l'exécution du programme, en prenant certaines ressources et en modifiant les vitesses d'exécution du système. Cela peut également se reproduire ultérieurement, si la machine virtuelle estime qu'elle peut faire un "meilleur" travail à ce moment-là.
En ce qui concerne le filetage: je ne me souviens pas très bien à ce stade si cela fait partie de la conception du langage, ou simplement une implémentation très courante, mais Java ne fournit généralement aucun outil pour contrôler précisément l'exécution des threads; Par exemple, alors qu'il existe 10 "priorités" spécifiées pour les threads, il n'y a aucune exigence que la machine virtuelle considère réellement ces priorités. Les opérateurs d'arrêt et de commutation de threads ne sont pas non plus définis, ni adhérés de manière rigide par le système.
Il existe plusieurs implémentations de JSR 1: Spécification en temps réel pour Java - une spécification qui a été approuvée en 1998. Cette spécification résout autant que possible les problèmes qui rendent Java standard impropre au temps réel.
Il y a peut-être 5 ans, Sun (maintenant Oracle) avait une VM RTSJ (qui n'a jamais eu de nom, AFAIK); IBM avait WebSphere Real Time; Et JamaicaVM était une solution gratuite (?), Indépendante de la plateforme. Googler ceux d'aujourd'hui n'apporte pas grand-chose.
la source
Le système d'exploitation
Tant que Java s'exécute sur Unix ou Windows ou tout autre système d'exploitation «normal», le temps réel n'est pas garanti.
Un système d'exploitation en temps réel est obligatoire pour exécuter des applications en temps réel.
la source
Techniquement, il est possible d'avoir du java en temps réel (comme le suggèrent les commentaires de SK-logic). cependant, il n'est pas courant pour un certain nombre de raisons non techniques:
Anciennes normes
Ayant du mal à trouver une référence pour cela, mais je suis certain que j'ai vu des normes de sécurité, ou des conseils de conformité aux normes de sécurité, mettre une interdiction générale sur Java. À tort ou à raison, si vous devez vous conformer à quelque chose qui dit que Java est verboten, alors Java est Verboten.
Vieux ingénieurs de sécurité
Même si les normes dont vous avez besoin pour ne pas interdire Java, travailler avec des auditeurs de sécurité / qualité sans expérience de Java signifie que vous ne suivez pas le chemin de la moindre résistance. Tout ce qui sort de l'ordinaire pour l'auditeur attirera probablement beaucoup de questions, ce qui signifie à son tour beaucoup de travail pour justifier vos choix.
La communauté
c'est-à-dire qu'il y a beaucoup de dépendance de chemin, la plupart des experts actuels en temps réel connaîtront le C ++, le C ou l'ADA à l'envers donc c'est un choix naturel pour faire de nouveaux travaux.
(Remarque: j'ai un peu confondu en temps réel et la sécurité dans ce qui précède, ce qui est en quelque sorte un autre problème, car même les normes de sécurité confondent souvent les deux)
la source