import와 메모리의 관계

박은빈·2022년 10월 15일
0

자바

목록 보기
9/25

코딩을 하다보면 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번 돌려보았는데
결과는

* 사용 전

  • 평균 시간 : 15749667
  • 평균 메모리 : 2097152

* 사용 후

  • 평균 시간 : 16296324
  • 평균 메모리 : 2097152

시간은 13~19정도로 다양하게 나오지만
메모리는 2097152로 고정됐다

시간도 *을 쓰나 안쓰나 비슷하게 나오는것같다

다행히 실행시간과 메모리에 영향을 주지 않는다

궁금해서 이유를 찾아보니
아주 옛날 자바버전 (1.2 or 5)에서는 *을 사용하게되면 전부 다 메모리에 넣어서 문제가 발생했었다는데 버전이 올라간 뒤로 import와는 상관없이
new를 통해 클래스를 선언해야 메모리에 올라가게 바뀌었다고한다

결론 : *을 쓰나 안쓰나 문제가없다. 하지만 가독성을 위해 코딩테스트가 아니면 *을 지양하도록하자

profile
안녕하세요

0개의 댓글