Mieux programmer en Java

18 downloads 14 Views 28KB Size Report
programmer en Java. Peter Haggar. Éditions Eyrolles. ISBN : 2-212-09171-0 ... Lorsque vous vous inquiétez de l'aspect performance de Java, vous devez tenir ...

Mieux programmer en Java

Peter Haggar

Éditions Eyrolles ISBN : 2-212-09171-0 2000

PARTIE

l’exécution de l’instruction return, cependant, le contrôle est transféré au bloc finally en // 2. Cela provoque l’exécution de l’instruction return 4, qui va entraîner dans la method2 le renvoi de l’entier 4. Habituellement, les programmeurs pensent que lorsqu’ils exécutent une instruction return, ils quittent immédiatement la méthode dans laquelle ils sont. Dans Java, cela n’est plus vrai en ce qui concerne l’emploi de finally. (On peut aussi entrer dans un bloc finally par une instruction break ou continue qui s’exécute à l’intérieur d’un bloc try.) Cette caractéristique particulière de finally peut provoquer une confusion et s’avère propice à de longues sessions de débogage. Pour éviter ce piège, assurez-vous que vous ne sortez pas d’une instruction return, break ou continue depuis l’intérieur d’un bloc try. Si vous ne pouvez éviter cette éventualité, vérifiez que l’existence d’un finally ne modifie pas la valeur de retour de votre méthode. Ce problème particulier peut survenir au cours de la maintenance de votre code, même avec une conception et une implémentation prudentes. De bons commentaires et un code passé soigneusement en revue permettent d’y parer.

ATELIER 23 Placer les blocs try/catch en dehors des boucles Les exceptions peuvent avoir un impact néfaste sur les performances de votre code. Pour savoir si les exceptions affectent négativement les performances, vous devez vérifier comment vous avez structuré votre code et si votre JVM se sert d’un compilateur JIT qui optimise votre code lors de son exécution. Deux éléments sont à considérer : • L’effet produit par le traitement d’une exception. • Les effets des blocs try/catch sur votre code. Vous ne pouvez pas traiter une exception comme bon vous semble car, après tout, que sont les exceptions Java ? Ce sont des objets et, comme tout objet, ils ont besoin d’être créés. Or la création d’objets est coûteuse en termes de ressources (voir l’ATELIER 32). Ainsi, traiter une exception implique certaines dépenses de ressources. Pour récupérer une exception, vous allez écrire quelque chose de similaire à ceci : throw new MyException;

Ce code crée un nouvel objet et en transfère ensuite le contrôle à un bloc catch ou finally ou à la méthode appelante. Comme le traitement des exceptions entraîne certains coûts, ne les employez que pour des conditions d’erreur. Lorsque les exceptions sont utilisées pour les contrôles de flux, le code n’est pas aussi efficace ou clair que si vous aviez employé des constructeurs de flux classiques (voir l’ATELIER 24). Limitez l’usage des exceptions aux seules conditions d’erreur et d’échec. Vous voulez que votre code s’exécute rapidement quand tout se passe bien et vous ne vous souciez généralement pas du temps que cela prendra pour qu’une erreur survienne. Lorsque vous vous inquiétez de l’aspect performance de Java, vous devez tenir compte de la JVM et du système d’exploitation utilisés. Des différences de temps d’exécution sont observées sur des JVM qui exécutent du code identique. Par conséquent, vous devez mettre en place des niveaux d’observation (profiling) sur vos systèmes pour déterminer les différences

1

2

Mieux programmer en Java ATELIER 23

de performance. Les informations décrites dans cet ATELIER ont été obtenues avec la configuration matérielle et logicielle dont le détail est donné dans l’introduction de la partie 4 (juste avant l’ATELIER 28). Placer des blocs try/catch à l’intérieur de boucles peut ralentir l’exécution du code comme le montre l’extrait de programme suivant : class ExcPerf { public void method1(int size) { int[] ia = new int[size]; try { for (int i = 0; i