Java의 System.nanoTime()은 정말 쓸모가 없나요?
질문:
A "Java의 System.nanoTime()에 주의하세요"라는 제목의 블로그 게시물은 다음과 같은 우려를 제기합니다. x86 시스템에서는 CPU별 카운터 사용으로 인해 System.nanoTime()이 잘못된 시간 값을 반환할 가능성이 있습니다. 멀티 코어 시스템에서 스레드 예약으로 인해 더 낮은 카운터의 프로세서가 할당되어 시간 차이가 음수 값이 될 수 있습니다.
답변:
블로그 게시물의 주장은 2011년에 작성되었으므로 더 이상 정확하지 않습니다. 후속 운영 체제 업데이트로 Windows 및 Linux에서 이러한 문제가 해결되었습니다.
Windows:
Windows XP 서비스 팩 2 이상에서 System.nanoTime()은 QueryPerformanceCounter를 사용합니다. /QueryPerformanceFrequency API는 HAL(하드웨어 추상화 계층)에 의해 구현되어 전체에서 일관된 시간 소스를 제공합니다.
Linux:
Linux clock_gettime(CLOCK_REALTIME) 함수는 모든 프로세서에서 시간이 일관되도록 보장합니다. 커널 버전 2.6.18부터 동기화되지 않거나 가변 주파수 타임스탬프 카운터가 감지되면 안전한 클럭 소스가 사용됩니다.
기타 아키텍처:
정보가 제한되어 있습니다. SPARC 및 Solaris와 같은 다른 아키텍처에 대해 사용할 수 있습니다. 그러나 일반적으로 최신 가상 머신(VM)은 기본 하드웨어에 관계없이 게스트 운영 체제에 일관된 시간 소스를 제공한다고 가정합니다.
결론:
시스템 .nanoTime()은 Java에서 시간 차이를 측정하는 유효한 방법으로 남아 있습니다. 2011년 블로그 게시물에서 제기된 문제는 해결되었으며 최신 시스템 구현에는 적용되지 않습니다.
위 내용은 Java의 System.nanoTime()은 여전히 신뢰할 수 있는 시간 측정 도구입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!