공부

[JS] 가비지 컬렉션

hahihuree 2021. 9. 16. 01:19

 

  • 컴퓨터가 일을 할때 처리할 정보들을 올려놓을 공간이 필요한데 이 공간이 메모리.
  • 메모리가 클 수록 동시에 더 많은 일을 할 수 있음 => 컴퓨터를 살 때 RAM을 보는 이유.
  • 컴퓨터에 작성하는 객체, 변수, 함수들이 메모리 공간을 차지하는 요소들임.
  • 프로그램 구동 중 필요하지 않는 메모리를 계속 점유하고 있는것을 메모리 누수(Memory Leak)이라고 함.
  • 메모리가 꽉 차기 전에 중간 중간 치워줘야함. 프로그래머가 비워줘야 할 메모리 공간을 모두 챙기는 것은 불가능.
  • 이를 방지하고자 가비지 컬렉션 도입!
  • 메모리를 알아서 관리하는 언어들을 managed language라고 함.

 

방법

  • mark-and-sweep: 메모리를 쭉 훑으면서 아직 필요한 것들만 마크한 다음 마크 안된것은 치움.
  • reference-counting: 한 요소가 다른 요소에게 몇번이나 참조가 되었는지 카운트 해서 그 수가 0이면 치움.

 

한계

  • 지워야 할 것을 모두 잡아내진 못함.
  • 각 언어, 플랫폼, 기기마다 바람직한 메모리 관리 방식 알아봐야 함.
  • 순환 참조하지 말것.(순환 참조를 하면 reference-counting이 0이 되지 않음.)