System.currentTimeMillis() là thước đo hiệu suất thời gian tốt nhất trong Java? Có bất kỳ dấu hiệu của gotcha khi sử dụng điều này để so sánh thời gian trước khi hành động được đưa đến thời gian sau khi hành động được thực hiện? Có một lựa chọn tốt hơn?System.currentTimeMillis() là thước đo hiệu suất thời gian tốt nhất trong Java?
Trả lời
Tôi hy vọng không - đó là những gì tôi sử dụng khi tôi không sử dụng nanoTime()
.
Một lưu ý (trên Windows w. Sun JDK6, trong bất kỳ trường hợp nào) với 'nanoTime' là giá trị trả lại phụ thuộc vào lõi CPU thực thi chủ đề. Nếu chủ đề bắt đầu thực hiện trên một lõi và kết thúc trên một lõi khác, các số của bạn sẽ được phần nào tắt. Tôi đã có mã như 'long start = System.nanoTime(); làm đi(); long elapsedNanos = System.nanoTime() - bắt đầu; 'và kết hợp với' elapsedNanos' là số âm. – gustafc
nếu giữa thời gian bắt đầu và kết thúc Chủ đề bị treo thì thời gian kết thúc cũng sẽ phản ánh thời gian tạm ngưng. do đó, sự kết thúc sẽ không phải là thời gian thực tế mà Thread đã bỏ ra để thực hiện. –
Trước Java 1.5 chỉ có System.currentTimeMillis. Tuy nhiên mức độ chi tiết của giá trị phụ thuộc vào hệ điều hành cơ bản và có thể lớn. Trên Windows XP, đôi khi tôi kết thúc với khoảng cách 20ms. Tôi nghe nói Linux là cách tốt hơn với những khoảng trống trong khoảng 1-2ms.
Với Java 1.5, bạn cũng có thể sử dụng System.nanoTime. Tôi chưa bao giờ gặp vấn đề với cái này.
Hãy xem này:
Một Gotcha là điều này đo thời gian thực trôi qua, không phải thời gian CPU - vì vậy nó là rất phụ thuộc vào tải hệ thống. Điều này là tốt nếu bạn trên một máy khác miễn phí, nhưng đôi khi có thể tạo ra kết quả thú vị nếu các quá trình khác đang cố gắng để làm việc.
This article có giải pháp xen kẽ cho sự cố.
Liên kết ngừng hoạt động:/ –
Bị bỏ qua vì liên kết được tham chiếu không còn khả dụng nữa. Vui lòng trích dẫn thông tin có liên quan. – ooxi
ngoài System.nanoTime()
, JMX có lẽ là lựa chọn khả thi nhất:
java.lang.management.ManagementFactory.getThreadMXBean()
bạn có thể truy vấn thời gian phân luồng CPU hiện nay (đo bằng nano giây nhưng không phải với nano giây chính xác, như đối với System.nanoTime
())
Nếu bạn cần các phép đo thời gian đơn điệu, System.nanoTime là một lựa chọn tốt hơn. System.currentTimeMillis chịu sự thay đổi về thời gian UTC - giây nhảy vọt, cập nhật NTP và jitter, cũng như người dùng thiết lập đồng hồ hệ thống *. Điều này có thể gây ra một số thất bại ngoạn mục trong một số loại ứng dụng định thời gian nhất định. System.nanoTime được cho là miễn dịch với tất cả điều đó.
Sự cố với System.nanoTime bao gồm tràn số định kỳ và không chính xác về thời gian dài, làm cho System.currentTimeMillis tốt hơn trong thời gian dài hơn (miễn là người dùng chỉ để đồng hồ hệ thống). Lưu ý rằng thay đổi múi giờ và múi giờ ban ngày không ảnh hưởng đến System.currentTimeMillis.
* Windows "Đồng bộ hóa với thời gian internet" thực hiện thay đổi từng bước. Điều này có thể rất gây rối, trái ngược với một thực thi NTP client thích hợp mà "đuổi" máy chủ bằng cách điều chỉnh tần số timebase của máy khách.
Bạn có thể sử dụng Stopwatch from Google Guava giúp thời gian đo siêu dễ dàng.
- 1. Java Đo lường hiệu suất
- 2. Đo lường hiệu suất Javascript (jQuery) và các phương pháp hay nhất (không tải thời gian)
- 3. Đo lường hiệu suất PHP
- 4. Hiệu suất thời gian chạy phản chiếu Java
- 5. Tại sao cách System.nanoTime() chậm hơn (hiệu suất) hơn System.currentTimeMillis()?
- 6. cách đo hiệu suất ngủ đông?
- 7. Đo lường hiệu suất của khách hàng
- 8. REST API đo thời gian phản hồi phía máy chủ (hiệu suất).
- 9. Symfony2 thời gian tải và hiệu suất
- 10. Hiệu suất vòng lặp Java
- 11. Thực hành tốt nhất của dbunit cho hiệu suất
- 12. Tạo một dấu thời gian duy nhất trong Java
- 13. Vấn đề hiệu suất lớn nhất trong Emberjs là gì?
- 14. Chức năng nào là tốt nhất về hiệu quả sử dụng ngăn xếp và thời gian
- 15. Tại sao các phép đo hiệu suất lại khác nhau?
- 16. Id dấu thời gian duy nhất hiệu suất cao cho nhiều chủ đề trong Haskell
- 17. AS3 giảm hiệu suất trò chơi lớn theo thời gian
- 18. Hiệu suất Java trong thuật toán số
- 19. Hiện System.currentTimeMillis đại diện cho thời gian UTC?
- 20. Cách tốt nhất để lưu trữ datetimes (dấu thời gian) trong CouchDB là gì?
- 21. DB SQL nhúng tốt nhất để ghi hiệu suất?
- 22. Máy chủ SQL: hiệu suất dữ liệu chuỗi thời gian
- 23. Hiển thị dữ liệu thời gian thực hiệu suất cao
- 24. đo thời gian tải ứng dụng iPhone
- 25. Dấu thời gian unix là cách tốt nhất để lưu dấu thời gian?
- 26. Tại sao mức độ cách ly tốt hơn có nghĩa là hiệu suất tốt hơn trong SQL Server
- 27. Hiệu suất từ chối xuống cấp theo thời gian
- 28. Đo thời gian tải trang ASP.NET
- 29. Hiệu suất kém thời gian của 'tài sản cào: precompile'
- 30. Android - Cách đếm thời gian trong một thời gian dài
câu trả lời hay ở đây http://stackoverflow.com/a/9458267/741970 –