V8 Minor GC


## Scavenger
![](https://www.notion.so/image/https%3A%2F%2Fmiro.medium.com%2Fmax%2F700%2F1*g6aPQ5Ej3SLia_bwCISmeA.png?table=block&id=200793d1-0e55-48c0-be7e-50ae5fe6d4ae&cache=v2)
Cheney's 알고리즘 의 원리로 작동
> 스캐빈저 알고리즘은 작은 데이터들을 관리하는데 유용
스캐빈저 GC 는 자주 발생
병렬의 헬퍼 스레드들을 사용하기때문에 아주 빠름

[V8 From Space](https://texonom.com/v8-from-space-bd640b2d99054eb18ec9bc69f4520b12) 공간이 다 차게 되면, minor GC가 발동

### Minor GC
1. `minor GC`는 재귀적으로 `from space`의 객체 그래프를 훑으면서 `active`(사용되고 있는 메모리)를 찾아내어 포인터를 수정하여 `to space`로 이동시킵니다.
2. `minor GC`가 `from space`를 비워버립니다. 이 단계에서 `from space`에 남아있는 객체들은 가비지로 간주합니다.
3. `minor GC`가 `from space`와 `to space`를 스왑하여, 모든 객체들은 `from space`에 존재하고, `to space`는 빈 공간이 됩니다.

### To Old Space
4. 위 절차가 반복되어 두번쨰 Minor GC에서 살아남은 `active` 표시된 객체들은 `old space`로 이동합니다. `minor GC`를 한 사이클만 살아남은 객체들은 `new space`의 `to space`로 이동되고, `active`로 표기되지 못한 객체들은 가비지로 간주되어 삭제됩니다.
5. `minor GC`는 다시 한번 `to space`와 `from space`를 스왑하고, `to space`는 빈 공간이 되고, `from space`에 모든 객체들이 존재하게됩니다.


[Stop the world GC](https://texonom.com/stop-the-world-gc-5b16f1ca6ac3450bbf63e3bf56397538) 방식이지만 빨라서 괜찮다

> [자바스크립트와 V8 엔진의 메모리 관리 프로세스](https://medium.com/naver-place-dev/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%99%80-v8-%EC%97%94%EC%A7%84%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B4%80%EB%A6%AC-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-f45091e696e1)

> [Cheney's algorithm](https://en.wikipedia.org/wiki/Cheney%27s_algorithm)
