Java Optimisation

  • java-illu

Code : JOP

Résumé

Objectif

Développer des applications performantes et fiables en java.
Le langage Java possède des caractéristiques qui simplifient le développement des applications. Cette facilité qui repose d’une part, sur les propriétés générales du modèle « objet » et d’autre part, sur des spécificités propres au langage, peut se traduire par des performances médiocres et une occupation mémoire importante. Cette formation a un double objectif : présenter un panorama synthétique des spécificités de Java qui jouent un rôle dans l’efficacité des applications, mais aussi présenter une méthodologie d’optimisation des applications ainsi que les concepts et les outils associés.

Animation

François HORN spécialiste reconnu dans le monde Java

Exercices

Une étude de cas est déroulée pendant toute la durée de la formation : un fil rouge.
Le but : Appliquer les concepts d’optimisation vus dans le cours, dans cet exemple.

Public

Développeurs

Pré-requis

Bonnes connaissances du langage Java. Expérience requise en programmation Java.

Durée

4 jours

Programme détaillé

Programme de la formation


Introduction

  • Les éléments intervenant dans l’optimisation et les actions correspondantes
  • Le choix d’un environnement d’exécution performant
  • Les outils d’aide à l’optimisation

Méthodologie et outils pour l’optimisation

  • L’optimisation des performances est souvent présentée comme une activité principalement basée sur l’usage d’astuces. En fait une approche méthodologique rigoureuse et systématique existe qui par ailleurs conduit souvent à une amélioration de la conception
  • Les éléments de la méthodologie
  • Quelques outils de profiling et de visualisation de la mémoire (hprof, jmp, TPTP, profiler de NetBeans), quelques outils de tests et d’aide (findBugs, CheckStyle…)
  • Travaux pratiques : utilisation des profilers hprof et jmp. Utilisation de junit. Profiling d’une application simple

L’optimisation et l’environnement d’exécution

  • Le choix du compilateur
  • Le choix de la JVM

L’optimisation et le langage

  • Une approche objective du langage Java montre que la plupart des problèmes de performances ne sont pas liés au langage lui-même mais à une mauvaise utilisation du langage
  • Identifier les vraies sources d’inefficacité
  • Connaître les bons usages qui les évitent
  • L’optimisation et la gestion des objets, les évaluations, les tests
  • L’optimisation et les nouveautés de Java5
  • Travaux pratiques : démonstrations de l’amélioration des performances de l’application témoin par une meilleure gestion des objets et des évaluations

L’optimisation et les librairies standard

  • La manipulation des String
  • Les classes  » Collection « 
  • Travaux pratiques
  • Démonstrations de l’amélioration des performances de l’application témoin par une meilleure manipulation des String et des Collections

L’optimisation et quelques Design Patterns

  • L’obtention de performances impose souvent de s’adapter aux caractéristiques d’un environnement donné. La flexibilité et la configurabilité des applications sont donc parfois un facteur important, dont le traitement reste encore aujourd’hui très ad hoc. Il existe pourtant des techniques connues. On présente d’une part, les solutions architecturales génériques et d’autre part, celles spécifiques à Java
  • L’utilisation des interfaces et des classes abstraites
  • L’utilisation de fabriques
  • L’utilisation d’adaptateurs, décorateurs, proxies
  • Les lanceurs d’application
  • Travaux pratiques : design Patterns pour l’optimisation des applications

L’optimisation et les I/O

  • Une programmation médiocre des IO peut avoir un effet désastreux sur les performances. Il est important de connaître les facteurs sur lesquels agir
  • La bufferisation, l’encodage des données
  • Le choix des bonnes classes de Stream
  • L’optimisation de la sérialisation
  • Les classes du package java.nio
  • L’optimisation spécifique aux IO réseaux
  • Travaux pratiques : démonstrations de l’amélioration des performances de l’application témoin par une meilleure gestion des IO

L’optimisation et le multithreading

  • Cette formation se focalise sur l’utilisation des threads par l’optimisation des IO (en particulier des IO réseau)
  • Le modèle d’activité avant Java5
  • Rappels programmatiques (création, ordonnancement, synchronisation des activités)
  • Le modèle d’activité de Java5. La nouvelle API
  • Les threads et l’optimisation
  • Travaux pratiques : démonstrations de l’usage des threads dans l’optimisation des performances de l’application témoin

L’optimisation et la gestion de la mémoire

  • Paramétrer le Garbage Collector pour améliorer les performances. Les techniques adaptées aux applications qui manipulent des objets de grande taille ou de très nombreux objets
  • Les principes généraux des GC (principaux algorithmes, collaboration avec l’allocateur)
  • L’organisation de la mémoire des principales JVM
  • Le GC de la JVM de Sun. Le GC de la machine d’IBM. Fonctionnement et paramétrage
  • L’impact des finalize sur les performances
  • La saturation mémoire (cause, diagnostic, solutions)
  • Les références faibles : SoftReference, WeakReference, PhantomReference
  • Les files de références
  • Les évolutions Java6 : le garbage collector
  • Travaux pratiques : Démonstration de l’effet des SoftReference. Utilisation d’outils de visualisation de la mémoire, de l’activité du GC

L’optimisation et l’utilisation de librairies C et C++

  • L’utilisation de code C ou C++ dans une application Java est une solution possible à des problèmes locaux de performances. On présente rapidement l’interface JNI prévue à cet effet
  • Les principes généraux de JNI : les étapes du développement. L’API JNIEnv. JNI et les performances

Conclusion

  • Références bibliographiques
  • Sites pertinents sur le sujet

Au sujet du formateur

bertrand

L’équipe LTM

Formation & développement mobile iOS/Android/Web

Contacter l’équipe