728x90
반응형
SMALL

"객체 생성은 비싸니 피해야 한다."가 아니다. 특히 요즘의 JVM에서는 별다른 일을 하지 않는 작은 객체를 생성하고 회수하는 일이 크게 부담이 되지도 않는다. 그러나, 불필요한게 있어서 좋을게 없다. 

 

가장 불필요한 객체 생성이 일어나는 시점은 오토박싱으로 예를 들 수 있다.

다음 코드를 보자.

package items.item6;

public class Main {
    public static void main(String[] args) {

        long start = System.currentTimeMillis();
        Long sum = 0L;
        for (long i = 0; i < Integer.MAX_VALUE; i++) {
            sum += i;
        }
        System.out.println("sum = " + sum);
        long end = System.currentTimeMillis();
        System.out.println("total time = " + (end - start) + "ms");
    }
}
  • 끔찍한 일이 일어나고 있다. 객체가 어디서 생성되는지 보이는가?
  • sumLong 박싱 타입인데, ilong 기본 타입이다. 이때 sum = sum + i를 이행하는 과정에서 i의 오토박싱이 일어난다. 즉, 이 루프를 돌면서 Long 인스턴스가 2의 31승개가 만들어진다.

이때, sum의 타입을 long으로만 바꿔주면 이 코드의 실행 속도는 2.2초에서 0.6초로 줄어든다.

그래서, 이 오토박싱도 불필요한 객체 생성이 될 수 있다. 

 

불필요한 객체 생성은 피하자.

 

 

728x90
반응형
LIST

+ Recent posts