System.currentTimeMillis()가 Java에서 시간 성능을 측정하는 가장 좋은 방법입니까?

StackOverflow https://stackoverflow.com/questions/1073325

  •  21-08-2019
  •  | 
  •  

문제

System.currentTimeMillis()가 Java에서 시간 성능을 측정하는 가장 좋은 방법입니까?이것을 사용하여 조치가 취해지기 전의 시간과 조치가 취해진 후의 시간을 비교할 때 어떤 문제가 있습니까?더 나은 대안이 있습니까?

도움이 되었습니까?

해결책

나는 바르지 않기를 바란다 - 그것은 내가 사용하지 않을 때 내가 사용하는 것입니다. nanoTime().

다른 팁

게다가 System.nanoTime(), JMX는 아마도 가장 실행 가능한 옵션일 것입니다.

java.lang.management.ManagementFactory.getThreadMXBean()

현재 스레드 CPU 시간을 쿼리할 수 있습니다(나노초 단위로 측정되지만 나노초 정밀도는 아닙니다. System.nanoTime())

당신은 사용할 수 있습니다 Google Guava의 Stopwatch 측정 시간이 매우 쉬워집니다.

단조로운 시간 측정이 필요한 경우 System.nanotime이 더 나은 선택입니다. System.CurrentTimeMillis는 UTC 타이밍 변형 (도약 초, NTP 업데이트 및 지터 및 시스템 시계를 설정하는 사용자뿐만 아니라 UTC 타이밍 변형에 적용됩니다. 이로 인해 특정 종류의 타이밍 응용 프로그램에서 약간의 장애가 발생할 수 있습니다. System.nanotime은 그 모든 것에 면역이되어야합니다.

System.nanoTime의 문제에는 주기적 숫자 오버플로 및 장기 타이밍 부정확성이 포함되어 시스템이 포함됩니다. 일광 절약 시간 및 시간대 변경은 시스템에 영향을 미치지 않아야합니다 .currenttimemillis.

*Windows "Internet Time과 동기화"는 단계적으로 변경됩니다. 클라이언트 타임베이스 주파수를 조정하여 서버를 "추격"하는 적절한 NTP 클라이언트 구현과 달리 매우 파괴적 일 수 있습니다.

Java 1.5 이전에는 System.currenttimemillis 만있었습니다. 그러나 값의 세분성은 기본 운영 체제에 따라 다르며 클 수 있습니다. Windows XP에서는 때때로 20ms의 간격으로 끝났습니다. 나는 Linux가 1-2ms 범위의 간격으로 더 좋다고 들었습니다.

Java 1.5를 사용하면 System.Nanotime을 사용할 수도 있습니다. 나는 이것에 문제가 없었습니다.

Gotcha 중 하나는 CPU 시간이 아닌 실시간 경과를 측정한다는 것입니다. 따라서 시스템 부하에 매우 의존합니다. 그렇지 않으면 무료 기계를 사용하는 경우 괜찮지 만 다른 프로세스가 작업을 시도하는 경우 때로는 흥미로운 결과를 낳을 수 있습니다.

이 기사 문제에 대한 intersting 솔루션이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top