1.3.3 Robustesse
- Conçu pour du logiciel embarqué
- Gestion de la mémoire avec ramasse miettes (en anglais,
garbage collector)
- Pas d’accès à la mémoire physique
- Gestion des erreurs par exception (voir
section 7
)
- Contrôle des types à l’exécution
- Compilateurs stricts et prévenants par exemple :
- Avertissement lorsqu’une variable est affectée et non
utilisée
- Erreur à l’utilisation de variables non
initialisées
- Erreur lorsque les exceptions ne sont pas gérées
précédent suivant
Le langage Java permet de réaliser des programmes robustes.
Il a été conçu pour réaliser des logiciels embarqués. Il tend à pallier les
difficultés dues à la gestion de la mémoire en C ou C++. Pour cela, le
langage est doté d’un ramasse miettes. Les allocations d’objets
sont dynamiques et la récupération de l’espace mémoire inutilisé est
réalisée par ce ramasse miettes (Garbage Collector ou GC). Les langages
modernes sont dotés de ramasse miettes. Le GC est déclenché lorsque la mémoire
disponible de la JVM est faible ou périodiquement. Le GC est un processus qui
consomme du temps et il doit être contrôlable pour permettre des applications
de type temps réel. Contrairement au langage C,
il n’est pas possible d’adresser directement une zone mémoire
physique à partir d’un programme Java.
Comme nous le verrons dans la section 7, la gestion des
erreurs est réalisée en utilisant un mécanisme qui permet de signaler
l’erreur en un point du programme et de traiter cette erreur en un autre
point. Le flot de contrôle des erreurs est matérialisé par des instructions de
contrôle particulières que nous présentons dans la section 7.
Il n’existe pas d’équivalent à l’édition de
liens pour produire un binaire exécutable. En Java, un programme est composé
d’un ensemble de fichiers de bytecode interprétables par la JVM. La JVM
charge ces fichiers, que l’on appelle aussi classes, à partir de leurs
noms comme nous le décrirons dans la section 5.6. La JVM réalise
des contrôles de type au même titre que le compilateur lorsqu’elle charge
une classe. Les classes peuvent aussi être télé-chargées. Dans ce cas, elles
sont vérifiées à partir d’une chaîne de certification. Les classes
télé-chargées sont exécutées dans un environnement limité. Par exemple, elles
ne peuvent pas accéder au système de fichiers.
Le compilateur Java est plus strict qu’un compilateur
C. Par exemple, il n’autorise pas
l’utilisation d’une variable si elle n’a pas été
explicitement initialisée. Il émet des avertissements si une variable est
affectée mais non utilisée. Il interdit aussi que les exceptions ne soient pas
traitées.
Christian Bac, Denis Conan, Télécom
SudParis, CSC 4002, Octobre 2015
|