Spring/Java,Spring

System.nanoTime & System.currentTimeMillis (feat. Intstant.now())

Pazery는ENFJ 2023. 9. 16. 00:16
반응형

System.currentTimeMillis

  • 시스템의 시간을 사용하기 위해서 or 현재 시간을 알아내기 위해서 주로 사용
  • 밀리초 단위 사용 (ms) - 1초 = 1000ms
  • System.currentTimeMills는 1970 -01 -01 (협정 세계시) 기점으로 흐른 시간을 ms 로 표현해주어 현재 시간으로 변환이 가능

System.nanoTime

  • 기준 시점에서 경과 시간을 측정하는데 주로 사용
  • 나노초 단위 사용 (ns) 1초 = 1e+9
  • 시스템 시간, 현재 시간과 무관
  • JVM의 정밀한 시간 소스의 현재 값은 long타입으로, 나노 세컨트 (1/10^-9)로하게 정밀한 시간 표현 가능
  • 다른 서버간 통신 시간 측정시 사용하면 안됨

결론

정교한 시간 성능을 측정하기 위해서는 nanoTime()을 추천

시스템 시간과 상관없이 정확한 시간 측정이 가능함.


추가

Instant.now()

  • java 1.8 부터 도입된 시간 객체 (기계의 시간 타임스탬프를 인간에게 친숙한 시간으로 다루기 위해서 사용)
    • 타임스탬프는 UTC 기준(1970. 1. 1. 0시 0분 0초)을 숫자 0으로 정하고 그로 부터 경과된 시간을 양수 또는 음수로 표현함.
  • 1970년 1월 1일 UTC 시작 시점을 기준으로 현재까지 계산
  • 시스템 시간을 참조 (운영체제의 시간 값을 기준)
  • 밀리초 (toMillis), 초(getSeconds) 모두 계산 가능
Instant current = Instant.now();
System.out.println("Current Instant = "+ current);

long epochSecond = current.getEpochSecond();
System.out.println("Current Timestamp in seconds = " + epochSecond);

/*
Current Instant = 2023-09-14T01:31:09.961Z
Current Timestamp in seconds = 1694655069
 */

참고

[java]System.currentTimeMillis() 와 System.nanoTime() 사용하기.

자바 시간 성능 측정 (nanoTime(), currentTimeMillis(), Instant.now())

반응형

'Spring > Java,Spring' 카테고리의 다른 글

Session Storage Strategy  (0) 2023.09.20
Lombok 이란?  (0) 2023.09.18
Java 8 표준 API의 함수형 인터페이스  (0) 2023.09.17
Oracle JDK & Open JDK  (0) 2023.09.15
[Spring Boot] Spring boot 버전에 맞는 Dependency 버전 찾기  (1) 2021.10.11