-
(Java)for문 / Collection.size() 성능 개선Java & Kotlin 2021. 4. 4. 03:07반응형
1. 문제
크롤링한 데이터를 배열에 임시 저장 후 다시 꺼내서 DB에 저장하는 for문 입니다. 이때 데이터의 개수는 약 800개가 되고, 평균 131초가 걸립니다.
어떻게 단축 할까요?
2. 연구
for loop안에서 size() 메서드를 계속해서 호출하게 되면, 해당 List 사이즈를 계속 해서 측정 후 돌려주는 연산이 일어납니다. 즉 JVM의 overhead가 발생하게 됩니다.
하지만 두번째 코드에서는 같이 for문 밖, 객체변수에 size()을 할당합니다. 즉 List의 size를 측정하는 size() call이 한 번만 발생합니다. 최초에 측정한 사이즈를 가지고 그대로 사용하게 됩니다.
실제로 측정해봤습니다. 약 800개 데이터, 3회 평균 측정 시간 입니다.
각각 131571ms, 119916ms 입니다. 약 20초의 차이 입니다.
만약에 데이터의 숫자가 800개가 아니라 80,000개였다면 훨씬 더 큰 차이를 보였을거라고 생각합니다.
3. 결론
for문처럼 반복해서 연산을 해야 할 때는 최대한 반복되는 부분을 줄여나가는 식으로 코드를 작성해야 할 것 같습니다.
4. 참고 문헌
stackoverflow.com/questions/4438710/using-collection-size-in-for-loop-comparison
반응형'Java & Kotlin' 카테고리의 다른 글
Lambda(람다) 표현식 적용하기 (0) 2021.06.28 Java 불변 객체 - Immutable Object (0) 2021.04.24 (java)String vs StringBuilder 수행 시간 차이 (4) 2021.03.28 (Java)파사드 디자인 패턴 - Facade Design Pattern (0) 2021.03.28 (Java)Arrays.deepToString - 2차원 배열 출력 (0) 2021.03.11