Javascript
JS Recursion memory leak
SeanK
2021. 11. 10. 09:46
재귀함수를 연습하다 보면 가끔 이상한 코드를 작성해서 동작하면
스택을 초과했다는 경고메세지가 나오면서 작동이 중지되는 경험을 다들 한번씩은 해 보았을 것이다.
이것은 재귀함수를 실행하면서 재귀깊이(Recursion Depth)를 초과하는 상황이 발생했기 때문이다.
정확히는 Memory Leak가 발생하면서 execution context stack에 저장되는 중첩호출이 허용량을 넘겨버린 것이다.
오늘은 Memory Leak가 어떤것인지 한번 알아보자
Memory Leak
A Memory leak can be defined as a piece of memory that is no longer being used or required by an application but for some reason is not returned back to the OS and is still being occupied needlessly.
Memory Leak에 대한 정의는 위와 같다. 위의 정의에서는 더 이상 사용되지 않는 데이터 중에 운영체제에 데이터 공간을 반납하지 않고 공간을 차지하고 있는 데이터라고 정의내리고 있다.
재귀함수에서도 Memory Leak가 발생한다.
피보나치 함수를 예로 들어보자.
const fib(n) {
if(n<=1) return 1;
return fib(n-1) + fib(n-2);
}
fib(9)라는 것을 계산하기 위해선...
fib(9) = fib(8) + fib(7)
fib(9) = fib(7) + fib(6) + fib(6) + fib(5)
.
.
.
위와 같이 중복된 계산이 발생하게 된다. 이런 현상 때문에 Memory Leak가 발생한다고 볼 수 있다.