Il existe un dicton de longue date qui encourage l'optimisation des programmes à ne pas être facile.
Ne détruisez pas une architecture saine pour l'optimisation. Si une architecture saine est maintenue, les composants individuels doivent être peu liés et peuvent être modifiés ultérieurement sans affecter les autres.
Cela ne signifie pas que vous n'avez pas à penser aux performances tant que le programme n'est pas terminé. Il est presque impossible de corriger les failles des architectures populaires. Par conséquent, il est nécessaire de tenir suffisamment compte des performances au stade de la conception.
Lors de la conception d'un composant, la chose la plus difficile à changer une fois qu'il est décidé est la frontière entre le monde extérieur et le composant. L'exemple principal est
Dans la conception d'API, nous devons penser aux performances.
Par exemple, la méthode getSize de la classe java.awt.Component est censée générer une interface Dimension mutable à chaque appel, ce qui a un impact sur les performances.
À l'origine, Dimension aurait dû être immuable (Item17). De plus, la méthode getSize aurait dû être remplacée par deux méthodes qui retournent des composants pour des objets Dimension individuels (elle ne vient pas). En fait, la classe Component a une telle méthode en Java2, mais le code qui utilise getSize depuis un certain temps a encore des problèmes de performances.
En général, une bonne conception d'API s'accompagne de bonnes performances. ** Il est difficile de déformer l'API pour améliorer les performances. ** ** Les gains de performances qui y sont gagnés peuvent être annulés avec les futurs changements de plateforme, mais la difficulté de maintenir une API déformée doit toujours être présente.
Si une amélioration des performances est toujours nécessaire après une conception et une mise en œuvre réussies, essayez l'optimisation.
Il est nécessaire de mesurer les performances avant et après l'optimisation. Comme il est difficile de prédire quel programme est long à exécuter, nous procéderons à l'optimisation tout en mesurant pour ne pas perdre de temps.
En utilisant l'outil de profilage, vous pouvez voir quelle méthode prend combien de temps et combien de fois elle est appelée. À ce stade, vous pouvez voir si la sélection de l'algorithme est correcte. Selon le choix de l'algorithme, les performances changeront radicalement, alors rendez-le approprié.
Il existe également un outil appelé JMH, qui est un cadre de micro-benchmarking. Cela vous permet de visualiser des informations détaillées sur les performances dans votre code Java.
La mesure des performances en Java est plus nécessaire que dans les langages plus anciens tels que C et C ++. En effet, il existe un grand écart entre le traitement exécuté par le CPU et ce qui est exprimé dans le code par rapport à ces langages.
De plus, en Java, les performances varient en fonction de l'implémentation, de la version commerciale et du processeur. Si vous constatez qu'il s'exécute sur différentes plates-formes, il est important de mesurer les performances dans chaque environnement. En conséquence, des compromis de performance pour chaque environnement se produisent souvent.
À mesure que l'environnement dans lequel Java s'exécute devient plus complexe, les performances deviennent moins prévisibles. Par conséquent, on peut dire que le besoin de mesures augmente.
Recommended Posts