코딩을 하다보면 import를 항상 한다
하지만 이 임포트에는 하나하나씩 임포트를 하는 경우가 있고
import java.util.*;
위에 코드처럼 util안에 있는 모든 클래스를 임모트하는 코드도 있다
그런데 이렇게 *을 이용해 임포트를 하면 메모리와 실행 시간이 길어질까?
코딩테스트를 할때 실행시간과 메모리는 중요한 이유이기때문에 한번 측정해보았다
코드는 간단하다
//import java.util.Scanner;
import java.util.*;
public class ClassTimeMeasurement {
public static void main(String[] args) {
//메모리 측정
Runtime runtime = Runtime.getRuntime();
long memory = runtime.totalMemory() - runtime.freeMemory();
//시간 측정
long start = System.nanoTime();
Scanner sc = new Scanner(System.in);
//메모리 측정
int num = 0;
for(int i=0; i<1000000; i++ ){
num += i;
}
long finish = System.nanoTime();
long time = finish - start;
System.out.println("최종시간 : " + time);
System.out.println("메모리 : " + memory);
}
}
메모리 측정을 위해 runtime클래스 에서 총 메모리와 남은 메모리를빼주어서 사용 메모리를 확인했다
그리고 시간은 nanoTime을 이용해 나노단위로 정밀하게 측정을 해보았다
총 10번 돌려보았는데
결과는
시간은 13~19정도로 다양하게 나오지만
메모리는 2097152로 고정됐다
시간도 *을 쓰나 안쓰나 비슷하게 나오는것같다
다행히 실행시간과 메모리에 영향을 주지 않는다
궁금해서 이유를 찾아보니
아주 옛날 자바버전 (1.2 or 5)에서는 *을 사용하게되면 전부 다 메모리에 넣어서 문제가 발생했었다는데 버전이 올라간 뒤로 import와는 상관없이
new를 통해 클래스를 선언해야 메모리에 올라가게 바뀌었다고한다