2014-08-29 20 views
10

Tôi đang sử dụng khung đo điểm chuẩn JMH (http://openjdk.java.net/projects/code-tools/jmh/) để chạy điểm chuẩn trên mã của tôi. Sự hiểu biết của tôi là JMH tìm kiếm JVM nhiều lần trong quá trình đo điểm chuẩn để loại bỏ bất kỳ cấu hình nào được xây dựng bởi lược tả chỉ trong thời gian (JIT) được thực hiện bởi JVM trong khi thực thi.Tại sao JMH chạy các nhánh khác nhau?

Tôi hiểu tại sao điều này rất hữu ích trong một số trường hợp như dưới đây (sao chép nguyên văn từ http://java-performance.info/jmh/):

By JHM dĩa mặc định một quá trình java mới cho mỗi thử nghiệm (bộ lặp). Điều này là cần thiết để bảo vệ bài kiểm tra từ các “hồ sơ” được thu thập trước đó - thông tin về các lớp được tải khác và thông tin thực thi của chúng. Ví dụ, nếu bạn có 2 lớp thực hiện cùng một giao diện và kiểm tra hiệu năng của cả hai, thì việc thực hiện đầu tiên (theo thứ tự kiểm thử) có thể nhanh hơn cái thứ hai (trong cùng một JVM), vì JIT thay thế phương thức trực tiếp gọi đến thực hiện đầu tiên với các cuộc gọi phương thức giao diện sau khi phát hiện việc thực hiện thứ hai.

Tuy nhiên, trong trường hợp bạn đo điểm chuẩn cùng một mã nhiều lần có lợi thế nào khi chạy 10 nhánh 20 lần lặp thay vì 1 ngã ba với 200 lần lặp?

Nhiều Cảm ơn,

Danny

Trả lời

11

Một số người khẳng định rằng một vấn đề được giải quyết bằng cách sử dụng dĩa đang chạy-to-chạy sai: http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_13_RunToRun.java

Tuy nhiên, bất kỳ kỹ sư nghiêm trọng phải có khả năng thực hiện đầy đủ kiểm soát môi trường điểm chuẩn để loại bỏ bất kỳ sự khác biệt nào giữa các lần chạy. Thật không hài lòng khi thấy những người sử dụng dĩa để vượt qua sự lười biếng của họ hoặc thiếu hiểu biết về cách các tiêu chuẩn của họ thực sự được thực thi.

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