이번 세 번째 게시물에서는 메모리 관리와 같은 또 다른 중요한 주제에 대해 논의하려고 한다. 이 주제는 프로그래밍 언어의 성숙도와 복잡성이 증가함에 따라 개발자들이 점점 더 무시하고 있는 주제이다.

개요

C와 같은 언어는 molloc()free()와 같은 저 수준 메모리 관리 기본 요소를 가지고 있다. 이 기본 요소들은 개발자가 운영 체제에 명시적으로 메모리를 할당하고 해제하는데 사용된다.

동시에, JavaScript는 things(객체, 문자열 등)이 생성될 때 메모리를 할당하고, 더 이상 사용되지 않을 때 “자동적으로” 메모리를 해제하는데, 이를 가비지 컬렉션(garbage collection)이라고 한다. 이런 자원 해제의 “자동적”인 특성은 혼란을 주는 원인이며, JavaScript(및 다른 고수준 언어)개발자들에게 메모리 관리를 신경 쓰지 않아도 된다는 잘못된 인상을 준다. 이것은 큰 실수이다.

고수준 언어로 작업하더라도 개발자들은 메모리 관리(또는 적어도 기본적인 부분)에 대한 이해를 가져야 한다. 때때로 자동 메모리 관리(가비지 컬렉터의 버그나 구현 제한 등)에 문제가 있을 수 있고, 이러한 문제를 적잘하게 처리하거나 (또한 최소한의 트레이드 오프와 코드 부채를 가지는 적절한 우회 방법을 찾기 위해) 개발자들은 이를 이해해야 한다.

Memory life cycle

사용하는 프로그래밍 언어가 무엇이든 간에, 메모리 수명주기는 대체로 항상 같다:

Untitled

각 단계에서 일어나는 일에 대한 개요는 다음과 같다.

What is memory?

JavaScript의 메모리에 바로 들어가기 전에, 일반적으로 메모리가 무엇인지와 그것이 어떻게 작동하지에 대해 간단히 이야기해보자.

하드웨어 수준에서 컴퓨터 메모리는 많은 수의 플립플롭으로 구성되어 있다. 각 플립플롭은 몇 개의 트랜지스터를 포함하고 있으며 하나의 비트를 저장할 수 있다. 개별 플립플롭은 고유한 식별자로 주소 지정 가능하므로 우리는 그들을 읽고 덮어쓸 수 있다. 따라서 개념적으로, 우리는 우리의 전체 컴퓨터 메모리를 우리가 읽고 쓸 수 있는 비트의 거대한 배열로 생각할 수 있다.

인간은 비트로 모든 생각과 산술을 하는 것에 그리 능숙하지 않기 때문에, 비트를 더 큰 그룹으로 구성하여 숫자를 나타내는데 사용한다. 8비트를 1바이트라고 한다. 바이트 이상으로는 워드가 있으며(때때로 16비트, 때때로 32비트이다)

이 메모리에는 많은 것들이 저장된다.

컴파일러와 운영 체제가 협력하여 대부분의 메모리를 관리를 담당하지만, 무슨 일이 일어나고 있는지 확인하는 것이 좋다.