Java Real Time – Faire du temps réel avec Java

Montre pour Java Temps RéelLe temps réel est utilisé dans de nombreux domaines, essentiellement dans les milieux où l’informatique doit se faire oublier: les telecoms, la finance, l’industrie, l’automobile, l’aéronautique… Un système temps réel a des contraintes de temps d’exécution, il doit délivrer des résultats dans un temps imposé. Les technologies temps réel sont l’apanage des langages bas niveau, tel que le C et le C++, Mais Java peut se faire une place au soleil. Nous allons voir qu’est ce permet de faire le Java Temps Réel, mais aussi comment l’utiliser.

Que fait le Java RTS ?

Communication Asynchrones

On distingue deux sortes de communications asynchrones:

  • Asynchronous event handling: le developpeur peut planifier les réponses aux évènements externes à la JVM.
  • Asynchronous transfer of control: fournit au développeur une manière pour un thread d’interrompre un autre thread de façon sécurisée.

Une horloge suisse

La précision de l’horloge est accrue. La JVM vous fournit une précision à la nanoseconde (10^-9 seconde) et non milliseconde (10^-3 seconde) comme avec les JVM classiques.

Accés direct en mémoire

Il est possible d’accéder directement à la mémoire physique, ce qui le rend semblable à J2ME. Il est possible de créer des pilotes de périphériques écrit en Java pur.

Gestion de la mémoire

Le Garbage Collector efface les objets qui ne seront plus utilisés afin de libérer de la mémoire. Il se déclenche manuellement ou bien souvent à l’improviste: ce qui peut gener les performances de votre système.

Il ya deux nouveaux types de zones mémoire, permettant de maitriser les appels du Garbage Collector:

  • javax.realtime.ImmortalMemory: les objets dans cette mémoire ne seront jamais effacés par le Garbage Collector. Ils seront effacés à la fin de l’exécution du programme.
  • javax.realtime.ScopedMemory: les objets créés dans un process particulier ne seront effacés que lorsque ce process aura quitté la section où les objets ont été créé.

Des Threads temps réel

Avec une JVM classique, vos threads héritent de la classe java.lang.Thread. Il existe avec les JVM RTS, deux autres sortes de Thread. De nouveaus types de threads ont été introduits.

  • javax.realtime.RealtimeThread. Ce thread hérite de la classe Thread. Cette classe permet d’acceder à des services temps réels tel que le transfert asynchrone de contrôle, mémoire non-heap, et les services avancés de planification
  • javax.realtime.NoHeapRealtimeThread. Ce thread hérite de la classe RealTimeThread. Il a pour spécificité de ne jamais être interrompu par le Garbage Collector.

Comment le mettre en œuvre ?

Pour faire du temps réel avec Java, il vous faut une JVM respectant les spécifications Java RTS, autant dire que ce n’est pas la JVM de base. Cette version, basée sur J2SE 5 est payante! Vous pouvez néanmoins obtenir une version d’essai.

Il existe aussi une excellente JVM temps réels réalisée par BEA: JRockit. Cette JVM est dans certains plus performants que la JVM de base. Elle est utilisée dans certaines applications militaires.

Les JVM temps réels doivent avoir un système d’exploitation sous jacent. Oubliez Windows et votre Ubuntu de base, vous devez avoir un système d’exploitation temps réel. Sun supporte officiellement deux OS temps réels:

Sources:

  • Blog très interressant, je pense que je vais suivre un peu l’actualité technique ici maintenant.

    Est-ce que cette JVM est dévelopée par sun ?

  • Merci Aster!

    Cette JVM RTS est développée par Sun.
    Concernant JRockit, elle est développée par BEA (qui appartient à Oracle).

    Ces deux JVM sont payantes.

    Il n’existe pas à ma connaissance de moyen de faire du temps réel gratuitement, et encore moins respectant l’esprit Open Source.

  • Il existe une autre machine virtuelle Java temps réel produite par Aonix: http://www.silicon.fr/fr/news/2008/06/15/aonix_presente_sa_machine_virtuelle_java_temps_reel_multic_ur

  • foufou

    je veux utiliser l’horloge pour déclancher une tache2 mais après qu’une tache2 fini l’exécution.
    comment faire attendre l’orloge pour que la tache1fini et declanhe la tache2.