사실 아주 사소한 부분에서 부터 생각보다 큰 문제가 발생하곤 한다.
이번이 그랬다...
현재 일하고 있는 사이트에서 특정 대상수가 아주 많아지면(수백개이상) 성능이 느려지는 문제가 있었다.
사람들은 처음에 쿼리를 의심했다 (나오는 exception 이 그러했거든... 그부분은 우선 넘어가고)
허나 점점 이건 쿼리 문제가 아니라는 느낌이 들었고 결과를 보면 맞는듯 했다.
이중루프가 과도하게 돌 수 있는 케이스가 존재하고 있었다.
해서 그 내부루프를 map 으로 변경해서 어마어마? 한 성능향상을 이루었다.
그러나 반전이 있었으니...
아무래도 루프가 그정도 돈다고 (물론 많이 돌긴한다; 수십만회?) 그렇게 느려질수 있는가는 의문이랄까?
그리고 찾아보니 그와 유사한 혹은 더 많은 루프를 도는 케이스도 나왔는데 그건 ms 안에 종료되었다.
어.. 이상하다 역시... 이게 아니었어;
결과는... 두둥
Map 의 선언이 루프에 있었다는것이다.
즉 500개의 아이템이 있다면 500번만 생성되면된다.
그게 중첩루프를 돌더라도 말이다. (특정조건일때만 new 해서 맵을 생성함)
그런데 ... 어찌된건지; 맵의 선언을 조건절 밖에 두었고 결과
500*500 번의 인스턴스가 생성된것이다.
원래는 500개만 생성할것을;
어이없는 실수였지만 (당연히 평소에 저런식으로 생성하지 않는다; )
찾을때는 생각보다 시간이 오래 걸렸다;
loop 을 돌면서 뭔가 리스트에 맵을 넣어야 할 경우, 나처럼 잘못된 인스턴스 생성으로 아이템수가 적을때는 몰랐다가 많아지면 생길 수 있는 성능이슈에 대해서 조심하도록 하자; 한마디로 항상 루핑조건을 만들땐 조심하자;
'IT > java' 카테고리의 다른 글
statements vs expressions (구문 vs 표현식) in lambda (0) | 2015.11.09 |
---|---|
java 8 tutorial 한글 (2) | 2014.04.09 |
call by ref ? value? (0) | 2013.06.21 |
intellij 한글 깨짐 (톰캣서버 돌릴때...) (0) | 2013.04.16 |
intellij 에서 maven 생성 간단히 처리하기 (0) | 2013.01.03 |