Java & Kotlin
(Java)for문 / Collection.size() 성능 개선
페페로니피자
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
반응형