티스토리 뷰

 

📌 메모리 누수(Memory Leak)란?

 

메모리 누수현상은 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상을 말합니다.

할당된 메모리를 사용한 다음 반환하지 않고 누적이 되기때문에 메모리 누수가 발생합니다.

 

 

 

메모리 누수를 방지하기 위해 가비지 컬렉터가 자동으로 메모리를 관리해주는데,

자동으로 메모리를 관해준다해서 우리가 내부구조나 동작원리를 공부할 필요가 없는 것은 아니다. 그 이유를 아래처럼 정리할 수 있겠다.

 

1. 같은 기능의 프로그램이더라도 메모리 관리에 따라 속도나 프로세스 실행시간 등의 성능이 좌우된다.

2. 결국 자동이기 때문에 최적화에 한계가 있어서 한정된 메모리를 효율적으로 사용할 수 있는 코드를 작성하는 것은 개발지의 몫이다.

 

 

 

 

 


 

💖 가비지 컬렉션(Garbage Collection)

 

가비지 컬렉션(Garbage Collection, GC)은 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요 없게 된 영역을 해제하는 기능이다. 1959년 무렵 리스프의 문제를 해결하기 위해 존 매카시가 개발하였다.

가비지 컬렉터는 내부적으로 finalize() 메서드를 호출하여 객체를 메모리에서 해제시킨다.

 

 

 

https://youtu.be/24f2-eJAeII

 

 

 

 


 

📑 도달 가능성(reachability) 

 

자바스크립트는 도달 가능성(reachability) 이라는 개념을 사용해 메모리 관리를 수행합니다.

‘도달 가능한(reachable)’ 값은 쉽게 말해 어떻게든 접근하거나 사용할 수 있는 값을 의미합니다. 도달 가능한 값은 메모리에서 삭제되지 않습니다.

 

 

1. 아래 소개해 드릴 값들은 그 태생부터 도달 가능하기 때문에, 명백한 이유 없이는 삭제되지 않습니다.

 

  • 현재 함수의 지역 변수와 매개변수
  • 중첩 함수의 체인에 있는 함수에서 사용되는 변수와 매개변수
  • 전역 변수
  • 기타 등등

이런 값은 루트(root) 라고 부릅니다.

 

2. 루트가 참조하는 값이나 체이닝으로 루트에서 참조할 수 있는 값은 도달 가능한 값이 됩니다.

 

 

자바스크립트 엔진 내에선 가비지 컬렉터(garbage collector)가 끊임없이 동작합니다.

가비지 컬렉터는 모든 객체를 모니터링하고, 도달할 수 없는 객체는 삭제합니다.

 

 

 

 

 


 

📑 간단한 예시

 

// user엔 객체 참조 값이 저장됩니다.
let user = {
  name: "John"
};

//user의 값을 다른 값으로 덮어쓰면 참조(화살표)가 사라집니다.
user = null;

 

이제 John은 도달할 수 없는 상태가 되었습니다. John에 접근할 방법도, John을 참조하는 것도 모두 사라졌습니다. 가비지 컬렉터는 이제 John에 저장된 데이터를 삭제하고, John을 메모리에서 삭제합니다.

 

 

 

 

 

 


 

 

 

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Memory_Management

 

자바스크립트의 메모리관리 - JavaScript | MDN

C 언어같은 저수준 언어에서는 메모리 관리를 위해 malloc() 과 free()를 사용한다. 반면, 자바스크립트는 객체가 생성되었을 때 자동으로 메모리를 할당하고 쓸모 없어졌을 때 자동으로 해제한

developer.mozilla.org

 

 

https://ko.javascript.info/garbage-collection

 

가비지 컬렉션

 

ko.javascript.info

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함