자바스크립트의 gc (스테픈2km완료)

가비지 컬렉션(Garbage Collection, GC) 은 이번 리엑트 쿼리에서 사용해보게 되었다.

리엑트 쿼리에서는 사용하지 않는 데이터의 경우 일정 시간이 지나면 메모리에서 삭제해서

캐시된 데이터의 수명 관리를 하고 있었는데

잘 생각해보면 자바스크립트에서도 이렇게 사용하지 않는 데이터를 삭제하는 기능이 있다는게 떠올랐다.

예전에 봤던 내용인데 따로 깊게 고민해보지는 않았던 부분이라

자바스크립트의 gc가 어떤식으로 사용되는지 등을 찾아보게 되었다.

image.png

image.png

내용을 찾아보니

리엑트 쿼리에서 옵션으로 적용했던 gc랑 동일한 내용이다.

image.png

이 부분을 읽어보니 동감이 갔다.

왜냐하면 기존에 내가 코딩했던 페이지들은 대부분 내가 필요없다고 느껴질때

null값을 주거나 이벤트를 삭제하는 등의 행위를 했었는데

이것은 내가 필요가 없을때를 직접 지정하는 방식이라 불편하다고 느끼고 있었다.

자바스크립트는 어떻게 필요가 없는지를 알 수 있을까?

image.png

내용을 읽어보니 주된 방식은 참조를 사용한다고 한ㄷ아.

이러한 참조방식에 문제점이 있는데

내용을 읽어보니 순환참조의 문제이다.

image.png

예시가 잘 정리되어있어

내가 따로 예시를 볼 필요는 없었다.

함수가 리턴값을 반환하면 내부의 변수는 스코프를 벗어나기때문에

메모리에서 사라지는게 맞지만

내부의 변수가 서로를 참조하고 있어

메모리에서 삭제를 할 수 없는 상황이다.

조금더 내용을 읽어보니

마크앤 스왑 알고리즘을 통해 이러한 순환참조 문제를 해결했다고 적혀있다.

image.png

내용을 좀 읽어보니

한글 번역이 어색해서 모던 자바스크립트라는 페이지에서 다시한번

해당내용을 읽어봤다..

image.png

도달가능성이라는 말이 아마도 마크앤 스왑 의 개념을 말하는것으로 보인다.

image.png

image.png

예시를 보면 이해가 쉽다

위에 사진은 전역에서 변수를 하나 만들어

name : john이라는 내용이 담긴 객체를 가리키고 있는데

image.png

이게 내가 공부했던 바로는 객체는 힙에 저장이 되고

우리가 만든 변수는 이 객체가 힙에 저장되어있는 주소를 기억하는 용도 로 사용된다.

"user"는 {name: "John"} (줄여서 John)이라는 객체를 참조한다.

image.png

하지만 이렇게 user에 다른 값을 저장시켰다고 보자

그럼 참조중이던 객체는 접근할 방법이 없게된다.

image.png

이렇게 도달할 방법이 없게되면 gc에서 삭제한다.

image.png

위 사진처럼 gc가 도달할 수 없는지를 확인하고

도달할 수 없다면 삭제한다고 보면된다.

image.png

일단 이러한 gc는 mark-and-sweep 알고리즘을 사용해서

도달 불가능한지 여부를 판단해서 메모리를 관리한다는걸 알 수 있었다.


스테픈 2km완료

image.png

Coin Marketplace

STEEM 0.19
TRX 0.13
JST 0.030
BTC 60289.82
ETH 3304.15
USDT 1.00
SBD 2.42