Przeglądałem nowo dodane funkcje wprowadzone w języku Java-8. Jedna prosta funkcja nowo dodana do klasy String jest dla mnie cicha i atrakcyjna - czyli String Join method.Java 8: Operacja łączenia ciągów ma znaczący wpływ na wydajność
Przykład:
String.join(" ", "AZY","BAX"); // returns AZY BAX
Dla ciekawości sprawdziłem (czas wykonania) wykonywanie tej funkcji poprzez napisanie prostego kodu 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);
}
Wynik nie jest tak ekscytujące dla mnie (time in neno sec)
Java 8 String Join 1340114
Tranditional 59785
String Builder Append 102807
Złożoność jest o (n) - w rzeczywistości jest (n * Rozmiar ind długość pojedynczego elementu)
Inne miary wydajności (pamięć itp.) Nie mierzyłem.
Moje pytania są następujące:
- Czy jest coś złego w moim pomiaru (przez większość czasu uważam na facetów JDK)
- Co jest celem dodawania „join” API do klasy String
- Czy jest dostępna analiza wydajności dla języka Java 8
Pisanie poprawnego testu porównawczego w języku Java nie jest tak proste z powodu heurystyki JIT i zbierania śmieci. Zobacz [Jak napisać poprawny mikro-benchmark w Javie?] (Http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java). – Jesper
Z ciekawości, dlaczego ktoś użyłby tej metody zamiast '+ '? – Djon
Również łączenie literałów łańcuchowych odbywa się podczas kompilacji, więc nie testujesz niczego w drugim teście. – Jesper