2012-07-20 33 views
7

Tôi đã quan tâm đến thời gian mà trò chơi đơn giản của tôi cần chạy vì vậy tôi đã sử dụng lược tả Java Netbeans (Java 1.7) và tôi có thể thấy các cột "Tự thời gian" và "Invocations" trong tab "Hot Spots"."Self Time" của Netbeans profiler thực sự có ý nghĩa gì?

Ví dụ, Mỹ Phương thức render có:

Tự Time: 1025 ms

invocations: 2311

Vì vậy, nếu tôi hiểu tốt, nó thực sự có nghĩa là TOTAL lượng thời gian của TẤT CẢ các phương thức kết xuất phương thức kết hợp với nhau cho 1025 ms và thời gian trung bình của một phương thức thực thi là 1025/2311 = 0,44 ms?

Nếu có, tôi có thể buộc IDE hiển thị thời gian trung bình thay vì tổng số lần không?

+1

Tại sao bạn muốn nó hiển thị trung bình nếu mục tiêu của bạn là giảm tổng số? –

+3

Vâng, nếu tôi có một vòng lặp trò chơi được thực hiện trong một phương pháp, tôi có thể muốn xem có bao nhiêu thời gian thực hiện (khung) mất ... –

+0

Có, bạn cần phải chia. Tuy nhiên, chạy profiler trong chế độ thiết bị đo đạc (hoặc, thực sự, chạy nó ở tất cả), ảnh hưởng đến hiệu suất (như ngăn chặn tối ưu hóa JIT), và không phải là cực kỳ hữu ích. Hướng dẫn sử dụng thời gian/điểm chuẩn (ví dụ, gọi System.nanoTime) có thể tốt hơn nhưng cũng đầy những vấn đề. –

Trả lời

19

Thông thường, "thời gian tự" đo thời gian dành cho bên trong cơ thể của phương thức - không bao gồm thời gian trong phương thức mà cuộc gọi đó gọi. Ví dụ: giả sử bạn có một phương pháp đơn giản để truy xuất những người dùng được sắp xếp, , được gọi là hai phương pháp không tự thực hiện bất kỳ cuộc gọi nào khác.

UserList getUsers() { 
    return sortUsers(loadUsers()); 
} 

Vì không hoạt động, thời gian tự của nó sẽ rất thấp mặc dù gọi phương thức là tốn kém.

Method  Self Time Call Time 
----------- --------- --------- 
getUsers   3 ms 1,184 ms 
loadUsers  923 ms  923 ms 
sortUsers  258 ms  258 ms 

Điều này dựa trên các cấu hình khác mà tôi đã sử dụng - không phải NetBeans. Hy vọng rằng ai đó có thể xác nhận hoặc phủ nhận điều này cho chính NetBeans.

+2

Lưu ý: Các phương thức được inlined sẽ được tính vào thời gian tự * của * cha mẹ và không được báo cáo. Trừ khi sự hiện diện đơn thuần của profiler làm cho JIT un-inline những phương thức đó và bạn sẽ thấy hiệu suất tổng thể giảm xuống. Profiler không phải là rất hữu ích để hiểu hiệu suất của các phương pháp cốt lõi, thời gian quan trọng. Microbenchmarking (ví dụ, không có profiler được tham gia) là tốt hơn, mặc dù khó khăn để làm đúng. –

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