안녕하세요. 올드한 개발자 티보이입니다.
자바 코딩을 하다 보면 시간 관련 기능이 필요할 때가 있습니다.
자바로 개발된 프로그램이 간혹 느려지면 디버깅 시 경과시간을 체크해야 되는 경우가 있습니다.
비슷하면서도 다른 두 개의 메서드인 System.currentTimeMillis() 와 System.nanoTime()에 대해 알아보겠습니다.
첫번째 메서드인 System.currentTimeMillis() 에 대해 알아봅니다.
현재 시간과 UTC(협정세계시)인 1970년 1월 1일 자정과의 차이로 밀리세컨드(1/1000초) 값을 반환합니다.
다음 예를 통해 사용법을 확인해 봅니다.
1
2
3
4
5
6
7
8
9
10
11
|
long curLong = System.currentTimeMillis();
System.out.println(curLong);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss"); // HH 24시간 hh 12시간
String curTime = sdf.format(new Date(curLong));
System.out.println(curTime);
Thread.sleep(5000);
long endLong = System.currentTimeMillis();
System.out.println((endLong - curLong)/1000 + "초 걸림"); // 밀리초라 천분의 1로
|
cs |
결과:
1586618583204
2020-23-12 00:23:03
5초 걸림
두 번째 System.nanoTime()는 JDK1.5부터 추가된 메서드입니다.
그럼 앞에 설명한 System.currentTimeMillis()와 어떻게 다를까요?
이 메서드는 현재 시간(시스템 시간)과 관계가 없습니다.
작동중인 JVM의 정밀한 시간 소스의 현재 값을 long타입으로 나노세컨드(1/1000000000초)를 반환합니다.
그래서 현재 시간을 측정하기 위해서 사용하면 안 되겠지요.
그리고 분산 시스템에서 다른 JVM끼리 시간 측정을 위해 사용하면 안 됩니다.
JVM마다 측정하기 위한 기준값이 다르기에 절대값이 될 수 없습니다.
즉, 서버간 데이터 전송 시간을 측정하기 위해 사용하면 안 된다는 겁니다.
밀리세컨드(1/1000)를 사용하는 System.currentTimeMillis() 보다 더 정밀합니다.
다음 예를 통해 사용법을 확인해 봅니다.
1
2
3
4
5
6
7
|
long nTime = System.nanoTime();
System.out.println(nTime);
Thread.sleep(5000);
long eTime = System.nanoTime();
System.out.println(eTime);
System.out.println((eTime-nTime)/1000000000 + "초 걸림"); // 나노초라 10억분의 1로
|
cs |
결과:
94882998233500
94887998455400
5초 걸림
결론은 시스템의 시간을 사용하기 위해서나 오늘 날짜를 알아내기 위해서는 System.currentTimeMillis()를 사용하면 되고
개발한 프로그램의 성능 측정을 위해 나노초로 정밀하게 구간 시간 측정을 위해서는 System.nanoTime() 사용하면 됩니다.
하지만 다른 서버 간 통신 시간 측정 시에는 System.nanoTime()를 사용하면 안 됩니다.
즐 코딩하세요.
'Software > Java' 카테고리의 다른 글
[자바]조건문 if-else문과 switch-case문, 예제로 살펴보기. (0) | 2020.04.19 |
---|---|
[자바]클래스(class), 객체(object) 그리고 인스턴스(화) 기초정리... (0) | 2020.04.17 |
[java]비교연산 "==" vs "equals()" 쉽게 이해하기. (0) | 2020.04.09 |
[디자인패턴]스트래티지 패턴(Strategy Pattern) 쉽게 이해하기 편. with 자바 (0) | 2020.03.17 |
[Java_Tutorial]36강-자바 코딩, 어노테이션 [Annotations, 자바 프로그래밍 기초 , 자바 튜토리얼] (0) | 2019.08.15 |