Back/Spring Java

for문(Loop) 성능 개선 - 1

밍꿔 2020. 4. 13. 17:49


반응형

 

for문을 사용할때 적은 양의 반복건은 사실 큰 성능 차이는 없다.

 

하지만 10,000건 이상 되는 예를들어 통계데이터, 엑셀파일로 데이터 추출 등등 

 

대량 데이터에 대해 반복문을 시행할때 어떻게 작성하느냐에 따라 속도차이가 심하다.

 

아래와 같이 다중 for문 형태에서 

 

 

Case1 (기본)

첫 번째

for(int i=0; i<100; i++){
    for(int j=0; j<1000000; j++){
        tempNumber++;
        ForTest forTest = new ForTest();
    }
}

두 번째

for(int i=0; i<1000000; i++){
    for(int j=0; j<100; j++){
        tempNumber2++;
        ForTest forTest = new ForTest();
    }
}

 

 

=> 근소한 차이(0.03초에서 2초 - size가 커지면 커질수록 차이가 더 남.) 로 첫 번째 타입이 더 빨랐다.

 

 

Case2 (객체생성)

첫 번째

for(int i=0; i<100; i++){
    for(int j=0; j<1000000; j++){
        tempNumber++;
        ForTest forTest = new ForTest();
    }
}

두 번째

for(int i=0; i<1000000; i++){
    for(int j=0; j<100; j++){
        tempNumber2++;
        ForTest forTest = new ForTest();
    }
}

 

 

=> 의외로 두 번째가 아주 조금 더 빨랐다.

 

 

 

Case3 (List생성 및 add)

첫 번째

for(int i=0; i<100; i++){
    for(int j=0; j<1000000; j++){
        tempNumber++;
        List list = new ArrayList();
        list.add(i);
        list.add(i);
        list.add(i);
        list.add(i);
    }
}

두 번째

for(int i=0; i<1000000; i++){
    for(int j=0; j<100; j++){
        tempNumber2++;
        List list = new ArrayList();
        list.add(i);
        list.add(i);
        list.add(i);
        list.add(i);
    }
}

 

=> 첫번째 케이스가 월등히 빨랐다.

 

 

* 총 반복횟수 보다 컬렉션, 배열 등의 로직의 여부가 성능차이를 좌지우지 했다.

  밖의 for문은 size가 작은 객체로 구성해야 한다.

 

 

반응형