2015-10-09 47 views
11

Tôi đang phát triển một ứng dụng xử lý hình ảnh Java 7u80 bằng cách sử dụng thư viện C++ thông qua JNI.Java 8 hiệu suất VS. Java 7

Khi tôi sẵn sàng execute streams in parallel với Java 8u60, tôi vừa chuyển sang JDK 8 và khởi động lại tất cả các bài kiểm tra đơn vị của mình.

Java 8u60 Overall duration: **35'408 [ms]**
Java 7u80 Overall duration: **29'581 [ms]**

Java 7 là trong trường hợp của tôi nhanh hơn Java 8 17% (cùng mã, cấp mã resp. 7 và 8).

  1. Tôi đã tự hỏi liệu kết quả đó có thể cụ thể cho đơn đăng ký của tôi hay không hoặc liệu người khác có nhận thấy hạ cấp biểu mẫu di chuyển hiệu suất Java 7 đến 8 không?
  2. Có tối ưu hóa cụ thể nào để thực hiện trong mã để tận dụng tối đa Java 8 không?

Nếu không có gì có thể được thực hiện, tôi sẽ sau đó thay vì thực hiện đoạn mã đa luồng với Java 7 chứ không phải là 8, để giữ cho đạt được hiệu suất tôi đã có với Java 7.

+2

Sử dụng dòng song song sẽ chậm hơn nếu sử dụng đúng cách. Giả sử các bài kiểm tra đơn vị của bạn không chạy [jmh] (http://openjdk.java.net/projects/code-tools/jmh/), bạn có thể bỏ qua các con số hoàn toàn. –

+2

@BoristheSpider Tôi tin rằng OP chưa sử dụng luồng, anh ấy chỉ thực hiện chuyển đổi phiên bản JDK và ngay lập tức nhận thấy sự thay đổi trong thời lượng tổng thể. –

+0

@ Jean-FrançoisSavard trong trường hợp đó chỉ có phần thứ hai của nhận xét của tôi được áp dụng. –

Trả lời

6

Ra mắt 21 soapUI (Parallel) kiểm tra chống lại WLS 12.1.3 chạy resp. Java 7u51 (*) và Java 8u60 trên môi trường thử nghiệm của tôi.

Kết quả thử nghiệm bên dưới (ảnh chụp màn hình được bao gồm trong trường hợp).

Để tóm tắt: soapUI thời gian chỉ đơn giản là thời gian thực hiện soapUI cho mỗi đường chuyền, trong khi
thời JMX (tích lũy giữa mỗi vượt qua) là thời điểm chi tiêu vào các phần quan trọng của ứng dụng của tôi.
Số liệu JMX là thời gian tính toán (số liệu tôi cố gắng thu nhỏ). Tôi sẽ không dựa vào chỉ số SOAPUI vì tôi không biết cách tính toán chính xác

Theo SOAPUI, JDK 7u51 là 6.7% nhanh hơn JDK 8u60.
Theo JMX, JDK 7u51 là 15.6% nhanh hơn JDK 8u60.

Sau đó xác nhận (với tôi) xu hướng được quan sát trong các bài kiểm tra đơn vị của tôi - cùng một kết quả. Mặc dù các bài kiểm tra này có lẽ không phải là bài kiểm tra để đánh giá hiệu suất JVM, tôi đoán rằng trong trường hợp của tôi, tốt nhất là nên ở lại JDK7, như trong trường hợp của tôi, khía cạnh hiệu suất là quan trọng.

Java 7
pass1SOAPUI: 22'324 [ms] - JMX :16'286 [ms]
Pass2SOAPUI: 24'129 [ms] - JMX :33'510 [ms]
Pass3SOAPUI: 22'170 [ms] - JMX :49'923 [ms]
TỔNG SOAPUI: 68'623 [ms](JMX: 49'923 [ms])

Java 8
pass1SOAPUI: 25'150 [ms] - JMX :19'767 [ms]
Pass2SOAPUI: 24'564 [ms] - JMX :39'702 [ms]
Pass3SOAPUI: 23'846 [ms] - JMX :59'172 [ms]
TỔNG SOAPUI: 73'560 [ms](JMX: 59'172 [ms])

(*): không có thời gian để cài đặt Java 7u60 như trong đơn vị thử nghiệm của tôi

Ảnh chụp màn hình

enter image description here

+0

Lợi thế thực sự về hiệu suất của Java 8 so với 7 là trên đa luồng, nói mô hình Fork-Join. Hình ảnh là một ý tưởng hay, mặc dù nó quá nhỏ để đánh giá cao các giá trị. – another

Các vấn đề liên quan