2010-07-06 54 views
6

Tôi muốn ghi lại thời gian cần thực hiện từ câu lệnh A đến câu lệnh B trong một lớp Java. Giữa các câu lệnh này, có rất nhiều cuộc gọi dịch vụ web được thực hiện. Tôi muốn biết nếu có một số đồng hồ dừng như chức năng trong java mà tôi có thể sử dụng để nắm bắt thời gian chính xác?Chụp thời gian thực hiện giữa 2 câu lệnh Java?

Kaddy

+0

Bạn có cần cái gì chính xác hơn không mili giây? Nếu không, System.currentTimeMillis() nên làm - gọi nó ngay từ đầu, gọi nó ở cuối và trừ. –

+1

Tôi đề nghị đọc [câu trả lời của Kevin về 'nanoTime()'] (http://stackoverflow.com/questions/1770010/how-do-i-measure-time-elapsed-in-java/1776053#1776053). –

Trả lời

12

này sẽ cung cấp cho bạn số lượng nano giây giữa hai nanoTime() cuộc gọi.

long start = System.nanoTime(); 
// Java statements 
long diff = System.nanoTime() - start; 

Đối với các phương pháp phức tạp hơn có một số câu hỏi trùng lặp địa chỉ lớp Stopwatch:

0

System.currentTimeMillis sẽ nhận được nó bằng mili giây và nanoTime tính bằng nano giây.

Nếu bạn đang cố gắng so sánh hiệu suất của các kỹ thuật khác nhau, hãy lưu ý rằng môi trường JVM phức tạp vì vậy chỉ cần thực hiện một lần là không có ý nghĩa. Tôi luôn viết một vòng lặp nơi tôi thực hiện phương thức 1 vài nghìn lần, sau đó thực hiện System.gc, sau đó thực hiện phương thức 2 vài nghìn lần, sau đó thực hiện một System.gc khác, sau đó lặp lại và làm lại toàn bộ ít nhất năm hoặc sáu lần. Điều này giúp tiết kiệm thời gian trung bình cho việc thu gom rác, biên dịch đơn giản trong thời gian, và những điều kỳ diệu khác xảy ra trong JVM.

2

@Ben S là câu trả lời tại chỗ.

Tuy nhiên, cần lưu ý rằng cách tiếp cận của chèn báo cáo đo lường thời gian vào mã của bạn không quy mô:

  • Nó làm cho mã của bạn trông lộn xộn.
  • Ứng dụng giúp ứng dụng của bạn chạy chậm hơn. Những cuộc gọi đến System.nanoTime() không đến miễn phí!
  • Nó giới thiệu khả năng xảy ra lỗi.

Nếu mục đích thực sự của bạn là thử và tìm ra lý do tại sao ứng dụng của bạn chạy chậm để bạn quyết định những gì để tối ưu hóa, thì giải pháp tốt hơn là sử dụng trình thu thập Java. Điều này có lợi thế mà bạn cần để làm cho ZERO thay đổi mã nguồn của bạn. (Tất nhiên, hồ sơ không cung cấp cho bạn thời gian chính xác dành cho các phần cụ thể. Thay vào đó, nó cung cấp cho bạn tỷ lệ thời gian ... hữu ích hơn cho việc quyết định nơi để tối ưu hóa.)

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