Regular Motion

개발자가 상팔자

[Java] StringBuffer 사용의 중요성.

압축되지 않은 파일 리스트를 다운받는 모듈이 있다.

파일 리스트는 짧게는 100개에서 많게는 700~800개가 될 수 있다.

이때 파일 리스트가 100개 정도일 때는 시스템이 느려지지 않는데,

파일 리스트의 길이가 500을 넘어가면 심각하게 느려져서 아무것도 할 수 없었다.

의심가는 곳을 몇군데 찾아보다가 발견한 코드.

……..부끄럽다………

혹시나 해서 시간을 체크해봤더니 Queue의 길이가 500일 때 3초, 600일 때 5초, 700일 때는 9초 가까이 소요됐다.

위의 코드를 아래와 같이 수정했더니 Queue의 길이가 700을 넘을 때도 80ms 이하로 동일한 작업을 수행했다.

StringBuffer 만쉐이.

전자의 코드가 느린 이유는 Java에서 String의 Immutable한 속성때문에 String 덧셈의 결과를 저장하기 위해 계속 새로운 String 객체를 생성하게 되는데 이 과정에는 메모리 할당 + @ 등의 작업이 추가되기 때문입니다.  GC를 유발하는 등의 단점은 덤입니다.

1 Comment

  1. The problem of finding the minimum edit distance between two strings of length m and n is now formulated in terms of finding the minimum edit distance for each of the three subproblems.

답글 남기기

© 2017 Regular Motion

Theme by Anders NorenUp ↑