메모리 관리
2022. 12. 8. 20:53ㆍ기본기가 부족하다면/자바스크립트
MDN에 의하면 아래와 같이 설명하고 있다.
메모리 생존주기는 프로그래밍 언어와 관계없이 비슷합니다.
1. 필요할 때 할당합니다.
2. 할당된 메모리를 사용합니다. (읽기, 쓰기)
3. 더 이상 필요하지 않으면 해제합니다.
1번과 3번의 경우는 고수준의 언어에서는 암묵적으로 작동을 하기 때문) 정확하지는 않지만 어느정도는 맞는 말이다.
여기서 드는 의문점,
그렇다면 자바스크립트는 어떤 경우에 더 이상 메모리가 필요하지 않다고 생각하는걸까?
자바스크립트는 변수가 선언될 때, 자동으로 메로리를 할당한다.
(메모리를 할당할 때는 변수, 함수로 나뉘고 메모리 공간도 다르지만, 이건 다른 글에서 다뤄보기로 한다.)
가령 let a = 1; 이라는 변수를 선언하고, console.log(a) 로 사용한다고 하면
1-1. let a / a = 1 두 가지로 나누어 변수를 먼저 선언하고 변수에 값을 할당한다.
2-1. number 타입은 8바이트이므로, 즉 메모리셀 8개를 사용해 저장한다. (메모리의 주소값을 저장)
3-1. 변수를 호출하면 메모리의 주소값이 아니라, 주소값이 가리키는 메모리에 할당된 bit를 해석한 값이 반환된다.
다시 a = 100; 으로 a에 다른 값을 할당하면
4-1. 기존 메모리에 저장된 값을 변경하는게 아닌 새로운 메모리에 값을 저장하고 저장된 메모리 주소로 변경된다.
5-1. 1 을 가지고 있는 메모리는 '가비지 컬렉터' 에 의해 메모리에서 해제한다.
혹시, 글을 읽고있을 아직 메모리와 주소값에 대한 개념이 없는 사람들을 위해 예시를 들자면
A 라는 사람이 1원을 은행에 맡긴다고 하자,
그렇다면 1이라는 창고에 'A가 1원 맡김' 이라는 장부를 작성할 것이다. (1-1과 동일)
1-1. 1이라는 창고에 'A가 1원 맡김' 이라는 장부를 작성한다.
2-1. 1원은 창고 중 8칸이 필요하므로(그렇게 정했다고 치자) 8칸에 'A가 1원 맡김' 을 작성해서 보관한다.
3-1. A가 은행에 1원을 찾으러오면, 장부를 확인하고 8칸을 준다.
4-1. A가 다시 100원을 맡기면, 'A가 1원 맡김' 이라는 장부는 그대로 둔채로 'A가 100원 맡김' 이라는 장부를 새로 쓰고, 1원과 동일한 칸이 아닌 다른칸에 100원을 쪼개 보관한다.
5-1. 1원을 맡겼던 창고는 '가비지 콜렉터' 라는 사람에 의해 삭제된다.
즉, 자바스크립트는 기존 변수에 새로운 값이 할당되면 기존 값이 필요없다고 판단하고 가비지 컬렉터로 떠나보낸다.
저수준 언어에서는 메모리가 필요없어질 때를 개발자가 직접 결정하고 해제하는 방식을 사용하지만, 자바스크립트와 같은 고수준 언어들은 '가비지컬렉션' 이라는 자동 메모리 관리 방법을 사용한다.
반응형
'기본기가 부족하다면 > 자바스크립트' 카테고리의 다른 글
[예외처리] Promise, async & await (0) | 2022.12.14 |
---|---|
가비지 컬렉터 (0) | 2022.12.08 |
실행 컨텍스트 (Execution Context) (1) | 2022.12.08 |
Generic 을 알아볼까 (0) | 2022.08.01 |
객체와 배열은 참조형 (0) | 2022.08.01 |