System.currentTimeMills(), System.nanoTime() 알고 사용하자

2025. 12. 16. 22:44·JAVA

시간 측정을 위한 메서드 로직

  • 보통 시간을 측정하기 위해 System.currentTimeMills() 이나 System.nanoTime() 을 사용하여 측정하고자 하는 시간을 측정한다.
  • 두 개의 차이점과 어떤 상황에 쓰는지 알아보자

System.currentTimeMills()

  • 현재 시간과 UTC인 1970년 1월 1일 자정과의 차이로 밀리세컨드(1/1000 초) 값을 반환한다.
public class TimeMeasureMillis {
    public static void main(String[] args) {
        long start = System.currentTimeMillis(); // 시작 시각 (ms)

        // 측정할 코드
        for (int i = 0; i < 1_000_000; i++) {
            Math.pow(i, 2);
        }

        long end = System.currentTimeMillis();   // 종료 시각 (ms)
        System.out.println("실행 시간: " + (end - start) + "ms");
    }
}

System.nanoTime()

  • JDK 1.5 부터 추가되어 시간 측정을 위해 만들어진 메서드이다.
  • 이 메서드는 현재 시간(시스템 시간)과 관계가 없다.
  • 작동중인 JVM의 정밀한 시간 소스의 현재 값을 long 타입으로 나노세컨드(1/1000000000초)를 반환한다
  • 따라서 절대적인 시간을 측정하거나 다른 JVM 서버간 시간 측정을 하지 않아야한다.
public class TimeMeasureNano {
    public static void main(String[] args) {
        long start = System.nanoTime(); // 시작 시각 (ns)

        // 측정할 코드
        for (int i = 0; i < 1_000_000; i++) {
            Math.pow(i, 2);
        }

        long end = System.nanoTime();   // 종료 시각 (ns)
        System.out.println("실행 시간: " + (end - start) / 1_000_000.0 + "ms");
    }
}

두개의 성능 비교와 권장사항

  • System.nanoTime() 의 성능이 훨 좋으며 표현할 수 있는 시간의 단위도 더 넓다.
  • 하지만 nanoTime() 은 현재 시각과 같은 연산은 할 수 없다.(경과시간만 알 수 있음)
  • 따라서 시간 측정 로직에는 nanoTime 을 사용하는 것을 권장한다.

'JAVA' 카테고리의 다른 글

String, StringBuffer, StringBuilder 알고 사용하자  (1) 2025.12.16
깊은복사와 얕은복사란? Cloneable 을 사용하지 말자  (0) 2025.11.24
자바의 제네릭 기초부터 deep dive  (0) 2025.11.24
java 에서 equals 와 hashcode 를 재정의 해야하는 이유  (0) 2025.11.11
[java의 병렬 프로그래밍] complete 할 수 있는 Future -CompletableFuture 의 원리와 사용법  (0) 2025.07.30
'JAVA' 카테고리의 다른 글
  • String, StringBuffer, StringBuilder 알고 사용하자
  • 깊은복사와 얕은복사란? Cloneable 을 사용하지 말자
  • 자바의 제네릭 기초부터 deep dive
  • java 에서 equals 와 hashcode 를 재정의 해야하는 이유
천방지축 개발자
천방지축 개발자
기록용 블로그
    250x250
  • 천방지축 개발자
    KKanging
    천방지축 개발자
  • 전체
    오늘
    어제
    • 분류 전체보기 (127)
      • 백엔드 (32)
        • Spring framework (4)
        • SpringSecurity (6)
        • JPA (4)
        • DB (6)
        • Spring Cloud (2)
        • CI CD (0)
        • 아키텍처 & 패러다임 & 디자인 패턴 (6)
        • 시스템 설계 & 성능 개선 (4)
      • JAVA (10)
        • 언어 (3)
        • JVM (4)
      • cs (57)
        • 운영체제 (8)
        • 컴퓨터네트워크 (6)
        • 자료구조 (15)
        • 알고리즘 (8)
        • http (20)
      • 인공지능 (5)
        • Reinforcement Learning (5)
      • 기타 (9)
        • 백준 (2)
        • python (2)
        • 백준 장학금 (5)
      • 회고 (5)
        • 토덕-리팩터링 (2)
      • 아티클 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    운영체제
    힙트리
    엔티티 그래프
    Kruskal
    이분탐색이란
    AVL트리
    멀티프로세서
    JVM
    연결리스트
    스케줄링
    jpa n+1 문제
    자료구조
    spring
    최대 힙
    python
    posix
    HTTP
    heapq
    강화학습
    SpringSecurity
    MSA
    점근적 표기법
    프로세스
    JPA
    백준장학금
    알고리즘
    최소힙
    완전이진트리
    연결리스트 종류
    백준 장학금
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
천방지축 개발자
System.currentTimeMills(), System.nanoTime() 알고 사용하자
상단으로

티스토리툴바