[JAVA] Point 67: Optimiser judicieusement

67. L'optimisation doit être effectuée avec prudence

Visez un meilleur programme qu'un programme rapide

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.

Évitez les conceptions qui limitent les performances

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

Pensez aux performances dans la conception d'API

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.

optimisation

Si une amélioration des performances est toujours nécessaire après une conception et une mise en œuvre réussies, essayez l'optimisation.

Mesurer les performances

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.

Outil de profilage

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.

Le besoin de mesure en 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

Point 67: Optimiser judicieusement
Article 55: Renvoyez judicieusement les options
Item 52: Utiliser la surcharge judicieusement
Point 53: Utilisez judicieusement les varargs
Point 45: Utilisez judicieusement les flux
Point 83: Utilisez judicieusement l'initialisation paresseuse
Point 66: Utiliser judicieusement les méthodes natives
Point 32: Combiner judicieusement les génériques et les varargs