-
"커리어리" 에 올라온 글을 보고 있던 중, 의외의 글이 내 눈에 들어왔다.
"Java Stream API는 왜 for-loop보다 느릴까?"
최근에 알고리즘 스터디와 인프런 강의를 통해 알게된 후로 부터는
for문 보다는 StreamAPI를 통한 처리 상황이 증가했고,
실무 프로젝트에서 Data Sync 미들 웨어를 개발 및 개선 하면서 적용한 사례가 있기 때문이다.
현실적으로 제일 좋게 느껴졌던 부분은
" 데이터를 손쉽게 필터링 할 수 있다 " 는 부분에 있어 큰 메리트를 느꼈고,
"코드가 간결해진다" 이 두가지는 확실히 느낄 수 있었다.
그런데..
for-loop 보다 느리다니..?
그래서 직접 테스트를 진행해보았다.
package org.example; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { int size = 1000000; List<Integer> list = new ArrayList<>(); for (int i = 0; i < size; i++) { list.add(i); } // Stream API 사용 long streamStartTime = System.currentTimeMillis(); long sumStream = list.stream().mapToLong(Integer::longValue).sum(); long streamEndTime = System.currentTimeMillis(); System.out.println("Stream API: " + (streamEndTime - streamStartTime) + "ms, Sum: " + sumStream); // for문 사용 long forLoopStartTime = System.currentTimeMillis(); long sumForLoop = 0; for (int i : list) { sumForLoop += i; } long forLoopEndTime = System.currentTimeMillis(); System.out.println("For Loop: " + (forLoopEndTime - forLoopStartTime) + "ms, Sum: " + sumForLoop); } }
실행 결과 > Task :Main.main() Stream API: 13ms, Sum: 499999500000 For Loop: 6ms, Sum: 499999500000
진짜 For Loop가 더 빠르다..
여기서 제일 중요한 Why?
Java Stream API는 왜 for-loop보다 느릴까?
The Korean Commentary on ‘The Performance Model of Streams in Java 8" by Angelika Langer
sigridjin.medium.com
아주 자세히 설명이 되어 있어, 해당 링크 를 꼭 들어가서 읽어보면 좋을 것 같다.
아주 아주 간단한 요약을 해보자면
StreamAPI는
> for문 보다 느린게 맞다.
단, 복잡한 처리의 경우 for문과 속도 차이가 크게 나지 않는다.
'Spring > 전체' 카테고리의 다른 글
[Step02]. Java.lang.OutOfMemoryError? (0) 2024.02.01 [개선] 트래픽 제한 및 부하로 인한 API Request 개선 (1) 2023.12.06 댓글