개발 코드를 작성하고 성능을 체크하는 경우가 있습니다.
요즘엔 워낙 좋은 라이브러리가 많지만, 직접 해보는 것도 나쁘지 않습니다.
자바에서는 주로 시간 메서드를 활용해서 측정합니다.
package com.devfoxstar.codingtest;
public class Time {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
long count = 0;
for (int i = 0; i < 100000; i++) {
for (int j = 0; j < 100000; j++) {
count++;
}
}
long endTime = System.currentTimeMillis();
long elapsedTime = endTime - startTime;
System.out.println("currentTime : " + count + "회"); //currentTime : 10000000000회
System.out.println(startTime); //1660401665296
System.out.println(endTime); //1660401665649
System.out.println(elapsedTime); //353
//밀리초를 초로 바꾸는 방법
System.out.println((double)elapsedTime / 1000); //0.353
}
}
package com.devfoxstar.codingtest;
import java.util.concurrent.TimeUnit;
public class Time {
public static void main(String[] args) {
long startTime = System.nanoTime();
long count = 0;
for (int i = 0; i < 100000; i++) {
for (int j = 0; j < 100000; j++) {
count++;
}
}
long endTime = System.nanoTime();
long elapsedTime = endTime - startTime;
System.out.println("nanoTime : " + count + "회"); //nanoTime : 10000000000회
System.out.println(startTime); //38455671946200
System.out.println(endTime); //38455976169400
System.out.println(elapsedTime); //304223200
//나노초를 초로 바꾸는 세 가지 방법
System.out.println(TimeUnit.NANOSECONDS.toSeconds(elapsedTime)); //0.30422320
System.out.println(((double)elapsedTime ) / 1_000_000_000); //0.3042232
System.out.println(elapsedTime * 1e-9); //0.3042232
}
}
package com.devfoxstar.codingtest;
import java.time.Duration;
import java.time.Instant;
public class Time {
public static void main(String[] args) {
Instant startTime = Instant.now();
long count = 0;
for (int i = 0; i < 100000; i++) {
for (int j = 0; j < 100000; j++) {
count++;
}
}
Instant endTime = Instant.now();
long elapsedTime = Duration.between(startTime, endTime).toMillis();
System.out.println("InstantNow : " + count + "회"); //InstantNow : 10000000000회
System.out.println(startTime); //2022-08-13T15:27:34.671396800Z
System.out.println(endTime); //2022-08-13T15:27:35.456313900Z
System.out.println(elapsedTime); //784
//밀리초를 초로 바꾸는 방법
System.out.println((double)elapsedTime / 1000); //0.784
}
}
정교한 시간 성능을 측정하기 위해서는 nanoTime()을 추천합니다.
시스템 시간과 상관없이 정확한 시간 측정이 가능합니다.
하지만 nanoTime()은 일부 서버 환경에서는 정확하지 않습니다.
이때는 currentTimeMillis(), Instant.now()를 활용할 수 있습니다.
시스템 시간을 활용하면 현재 시각을 기준으로 다양한 계산이 가능합니다.
물론 운영체제의 시간 설정이 일정하다는 전제 조건이 필요합니다.