Mesurer le temps d’exécution d’une méthode

Pour mes tests de performances, j’ai souvent besoin de calculer le temps d’exécution d’une méthode afin de valider ou non les optimisations.

Sachant que les JVMs actuelles analysent le code à la volée pour l’optimiser, la mesure de la méthode à analyser doit être faite plusieurs fois pour faire une moyenne. Naturellement, la première idée est d’utiliser System.currentTimeMillis() .
(Lire la suite…)

Le combat : String vs StringBuilder vs StringBuffer

L’objet String est immuable, c’est à dire que son état ne peut pas être modifié après sa création, et toute manipulation entraînera la création d’un nouvel objet ce qui peut diminuer les performances de la JVM.

Pour pallier à ce problème de performance, la classe StringBuffer permet de manipuler des chaînes de caractères sans créer à chaque changement un nouvel objet. Cette classe est méconnue mais existe depuis le JDK 1.0 !

Cependant, il faut savoir que toutes les méthodes de la classe StringBuffer sont synchronisées, elle est dite thread-safe ! Ceci est indispensable si la chaîne de caractères peut être accédée de manière concurrente sinon c’est inutile.

Heureusement, depuis Java 1.5, la nouvelle classe StringBuilder est une copie de StringBuffer mais avec des méthodes non synchronisées permettant ainsi  d’améliorer les performances pour la manipulation de chaînes de caractères sans accès concurrent.

J’ai écrit un petit test pour illustrer tout cela.
(Lire la suite…)

Develop with real-time Java: create applications with predictable response times

Voici un article d’IBM du 2 juin 2011 sur le développement d’application Java temps réel Develop with real-time Java.

Cet article explique notamment :

  • pourquoi la plateforme Java convient aux applications temps réels
  • comment porter une application Java non temps réel dans un environnement avec des contraintes de temps
  • comment la JVM peut tirer les bénéfices d’un systèmes d’exploitation temps réel
  • pourquoi certains outils externes peuvent aider à développer

Bonne lecture !

Manipulation de String : equals(Object anObject) vs isEmpty()

Pour commencer la semaine tranquillement, je fais un peu de relecture de code et je bloque là-dessus :

final String errorMessage; // Get a string from anywhere !
 
if (!errorMessage.equals("")) {
   // Do something
}

Pourquoi ne pas utiliser la méthode isEmpty(), disponible depuis Java 1.6, qui semble plus lisible et pratique à utiliser :

final String errorMessage; // Get a string from anywhere !
 
if (!errorMessage.isEmpty()) {
   // Do something
}

Peut être par un souci de performance…

(Lire la suite…)