개발 코드를 작성하고 성능을 체크하는 경우가 있습니다.
요즘엔 워낙 좋은 라이브러리가 많지만, 직접 해보는 것도 나쁘지 않습니다.
자바에서는 주로 시간 메서드를 활용해서 측정합니다.
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()를 활용할 수 있습니다.
시스템 시간을 활용하면 현재 시각을 기준으로 다양한 계산이 가능합니다.
물론 운영체제의 시간 설정이 일정하다는 전제 조건이 필요합니다.