Stavo passando per le nuove funzionalità esistenti introdotte in Java-8. Una semplice funzionalità appena aggiunta alla classe String è tranquillamente interessante per me, ovvero String Join method.Java 8: l'operazione di join delle stringhe ha un impatto significativo sulle prestazioni
Esempio:
String.join(" ", "AZY","BAX"); // returns AZY BAX
Per curiosità, ho controllato le prestazioni (tempo di esecuzione) di questa funzione scrivendo un codice java semplice
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);
}
Il risultato non è così eccitante per me (ora in neno sec)
Java 8 String Join 1340114
Tranditional 59785
String Builder Append 102807
La complessità è di o (n) - in effetti è (n * Dimensione dell'ind lunghezza elemento singolo)
Altre misure di prestazione (memoria ecc.) Non ho misurato.
Le mie domande sono:
- qualcosa che non va nella mia misura (il più delle volte credo sui ragazzi JDK)
- Qual è l'intento di aggiungere “join” API per classe String
- È disponibile un'analisi delle prestazioni per Java 8
Scrivere un benchmark corretto in Java non è così semplice a causa dell'euristica e della garbage collection JIT. Vedi [Come posso scrivere un micro-benchmark corretto in Java?] (Http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java). – Jesper
Per curiosità, perché si dovrebbe usare questo metodo invece di '+'? – Djon
Inoltre, la concatenazione di stringhe letterali viene eseguita in fase di compilazione, quindi non si sta verificando nulla nel secondo test. – Jesper