Java 8 : Chaîne de se joindre à l'opération a d'impact significatif sur les performances

Je passais par le nouvellement ajouté existant fonctionnalités introduites dans Java 8.
Une simple fonctionnalité récemment ajoutée à la classe String est calme attrayant pour moi – c'est-à Chaîne de Rejoindre méthode.

Exemple:

String.join(" ", "AZY","BAX"); //returns AZY BAX

Pour la curiosité, j'ai vérifié les performances (temps d'exécution) de cette fonction par l'écriture d'un simple code java

public static void main(String[] args) {
    long start = System.nanoTime();
    String abc= String.join(" ,"AZY","BAX"  //joining 1000 words of size 3 char;
    long diff = System.nanoTime() - start;
    System.out.println(" Java 8 String Join " + diff);

     start = System.nanoTime();
    abc= "AZY"+"BAX"+"CBA"+  //adding 1000 word of size 3 char;
    diff = System.nanoTime() - start;
    System.out.println(" Tranditional " + diff);

    start = System.nanoTime();
    new StringBuilder().append("AZY").append("BAX").appe //appending 1000 word of size 3 char;
    diff = System.nanoTime() - start;
    System.out.println(" String Builder Append " + diff);

}

Le résultat n'est pas si excitant pour moi (de temps en neno sec)

Java 8 String Join     1340114
Tranditional             59785
String Builder Append   102807

La complexité est de o(n) en fait, c'est de (n * Taille de l'élément individuel de la longueur)

D'autres mesures de performance (mémoire, etc) je n'ai pas mesuré.

Mes questions sont:

  1. Il n'y a rien de mal dans ma mesure (la plupart du temps, je crois que sur le jdk gars)
  2. Quelle est l'intention de l'ajout de “rejoindre” l'API de la classe String
  3. Est-il de toute analyse de la performance pour Java 8 est disponible
L'écriture correcte de référence en Java n'est pas si simple, parce que le JIT heuristiques et de collecte des ordures. Voir Comment puis-je écrire un bon micro-benchmark en Java?.
Par curiosité, pourquoi aurait-on utiliser cette méthode au lieu de +?
Aussi, la concaténation de chaînes de caractères littérales se fait au moment de la compilation, de sorte que vous n'êtes pas vraiment tester quoi que ce soit dans le deuxième test.
Merci Jesper.. Kishan.. Sa ma copier/coller miste... Il convient de Chaîne abc= String.join(" ","AZY" ...
le code n'est même pas équivalent, la jointure a le délimiteur alors que le traditionnel et stringbuilder ne le font pas.

OriginalL'auteur dgm | 2014-06-05