Tôi đã trải qua các tính năng mới được thêm vào được giới thiệu trong Java-8. Một tính năng đơn giản mới được thêm vào lớp Chuỗi là hấp dẫn đối với tôi - đó là String Join method.Java 8: Hoạt động nối chuỗi có tác động hiệu suất đáng kể
Ví dụ:
String.join(" ", "AZY","BAX"); // returns AZY BAX
Đối với sự tò mò, tôi đã kiểm tra việc thực hiện (thời gian thực hiện) của tính năng này bằng cách viết một mã java đơn giản
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);
}
Kết quả không phải là quá thú vị đối với tôi (thời gian trong neno giây)
Java 8 String Join 1340114
Tranditional 59785
String Builder Append 102807
Sự phức tạp là o (n) - thực tế là (n * Kích thước của ind chiều dài phần tử ividual)
Các biện pháp hiệu suất khác (bộ nhớ, vv) Tôi chưa đo.
Câu hỏi của tôi là:
- Có gì không ổn trong đo lường của tôi (phần lớn thời gian tôi tin vào những kẻ jdk)
- mục đích của việc thêm là gì “tham gia” API để lớp String
- Có phân tích hiệu suất nào cho Java 8 không có sẵn
Viết điểm chuẩn chính xác trong Java không đơn giản như vậy bởi vì các thuật toán JIT và thu gom rác thải. Xem [Làm cách nào để viết một điểm chuẩn chính xác trong Java?] (Http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java). – Jesper
Vì tò mò, tại sao một người sử dụng phương pháp này thay vì '+'? – Djon
Ngoài ra, ghép chuỗi ký tự chuỗi được thực hiện tại thời gian biên dịch, vì vậy bạn không thực sự kiểm tra bất cứ điều gì trong thử nghiệm thứ hai. – Jesper