node.js에서의 메모리 관리에 대해서 알아보고 싶어 찾아보니 node.js는 V8엔진으로 실행되며 JITC 방식으로 컴파일된다고 한다!
즉, node.js에서의 메모리 관리 방법은 V8 엔진의 작동 방식을 통해 알 수 있을 것이다.
우선 V8 엔진과 JITC가 뭔지도 모르니 메모리 관리 방법을 알아보기 위해 먼저 이 둘에 대해서 다 알아보자.
메모리 관리 방식에 대해서는 다음 포스트에 작성해보도록 하겠다.
먼저 JITC는 소스코드를 기계어로 변환해주는 일종의 컴파일러이다.
보통 컴파일러와 인터프리터가 그 역할을 하는 것으로 유명하니 이 친구들과 비교를 하며 알아보자.
Compiler
소스 코드 전체를 기계어로 번역하여 컴파일하는 정적인 방식
- 코드 전체를 한번에 분석해야 하기 때문에 분석하는 데에는 많은 시간이 걸리지만, 이미 분석한 코드에 대한 최적화를 진행하기 때문에 코드를 실행시키는 데에는 많은 시간이 걸리지 않는다.
- 각 코드에 대한 object 코드를 만들고 linking 과정도 거쳐야 하기 때문에 메모리 효율이 좋지는 않다.
- 코드를 분석하는 과정에서 오류를 찾을 수 있기 때문에 직접 실행해보지 않아도 오류를 빠르게 찾을 수 있다.
- 다른 플랫폼에서 컴파일된 실행파일은 실행시킬 수 없다.
Interpreter
소스 코드를 한 줄씩 해석하여 실행하는 동적인 방식
- 소스코드를 한 줄 씩 해석하여 실행하기 때문에 실행시간이 더 오래걸린다.
- object 코드를 만들지 않고, linking 과정도 거치지 않기 때문에 컴파일러에 비해 메모리 효율이 좋다.
- 한 줄 씩 실행하기 때문에 해당 코드를 직접 실행시킨 이후에야 오류를 찾을 수 있다.
JITC (Just-In-Time Compiler)
실행과정에서 컴파일을 진행하는 방식
- 컴파일러와 인터프리터의 장점을 모아서 작동한다고 볼 수 있다.
- 한 줄 씩 코드를 컴파일하여 실행하며, 변환된 기계어는 캐싱해두어서 반복되는 코드가 들어오면 컴파일 과정을 거치지 않도록 한다.
V8 Engine
node.js에서 v8엔진을 사용하는데, V8엔진이 JIT 컴파일러의 일종인 것이다.
구글에서 만든 오픈소스이며 node.js와 chrome에서 서용한다.
본론이었던 node.js에서의 메모리 관리 방법에 대해서는 다음 포스팅에 작성하도록 하겠다..!
Ref