가비지 컬렉션Node.js는 V8엔진을 사용한다. V8 engine의 가장 큰 특징은 자동으로 메모리를 관리한다는 것이다. 이것은 가비지 컬렉션이 있어서 가능하다. 가비지 컬렉션은 힙 영역에서 더는 사용되지 않는 객체를 삭제하는 역할을 수행한다. 사실 이전에 자바의 메모리 구조와 가비지 컬렉션 동작 방식을 공부해서 정리한 적이 있었는데, 상당히 비슷한 느낌을 받았다.V8 엔진의 도식화된 Heap 사진이다. 예전에 자바에서의 가비지 컬렉션을 공부해본 경험이 있다. 위 그림을 보고 자바에도 저렇게 Young 영역과 Old 영역이 있는데, 자바스크립트도 가비지 컬렉터를 자바와 비슷하게 사용하는건가? 라는 생각을 했다. 그리고 찾아보니 거의 비슷했다. 자바는 Young Generation과 OldGenera..
이번 포스팅부터는 물리적인 메모리를 어떻게 관리할 것인가에 대해 살펴보겠습니다. 물리적 메모리는 일반적으로 두 영역으로 나뉘어 사용됩니다.낮은 주소 영역에는 운영체제 커널이 항상 상주해있고, 높은 주소 영역에는 사용자 프로그램이 있습니다. 사용자 프로그램이 올라간 영역을 관리하는 방법은 크게 두 가지로 나누어 볼 수 있습니다. 첫 번째는 연속 할당(Contiguous allocation)으로 프로그램이 메모리에 올라갈 때 통째로 메모리에 올라가는 방식입니다. 즉 각각의 프로세스가 메모리의 연속적인 공간에 적재되는 것입니다. 두 번째는 불연속 할당(Noncontiguous allocation)으로 프로그램을 구성하는 주소 공간을 같은 크기의 페이지 단위로 쪼개서 페이지 단위로 메모리에 올리는 방식입..
메모리는 주소를 통해 접근하는 매체입니다. 그렇기 때문에 메모리를 찾아가기 위해서 메모리별로 주소가 매겨집니다. 이 주소는 크게 2가지로 나뉩니다. 1. 논리적(Logical) 주소 vs 물리적(Physical) 주소 논리적 주소 프로그램이 실행되면 프로그램 별로 독자적인 주소 공간이 형성됩니다. 이처럼 프로그램마다 가지고 있는 주소를 논리적 주소(가상 주소)라고 합니다. 프로세스마다 0번지부터 시작하는 독자적인 주소 공간입니다. 물리적 주소 물리적인 주소는 말 그대로 실제 물리적인 메모리의 주소를 말합니다. 메모리에 실제 올라가는 위치를 의미합니다. 물리적인 메모리는 하나임으로 모든 프로그램 주소를 0번지부터 통으로 관리합니다. 그래서 물리적인 메모리 주소의 아랫부분에는 운영체제 커널, 상위에는 ..