Major GC


major GC는 old space를 관리
V8 엔진이 old space 에 여유 저장 공간이 없다고 판단때에 발동
> minor GC 사이클을 통해 동적으로 계산
old space에서는 Mark-Sweep-Compact알고리즘을 사용
TRI-COLOR(white-grey-black) 혹은 삼색 마킹 시스템

큰사이즈 minor gc로 하면 안좋다


![](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F31179a9b-664d-4a89-b0f0-0f947bee8309%2FUntitled.png?table=block&id=e48a81bf-2eea-454f-b7e7-f279025f6686&cache=v2)
1. Marking: 첫번째 스텝이며, `active`한 객체들과 그렇지 않은 객체들을 식별합니다. `GC Roots`(스택 포인터)로부터 접근 가능한 오브젝트들은 재귀적으로 `active`/`alive` 마킹되며, 깊이 우선 탐색 (depth first search) 알고리즘입니다.
2. Sweeping: GC가 힙 메모리를 스캔하면서 `active`로 마킹되지 않은 객체들의 메모리 주소를 저장합니다. 이 공간들은 `여유 공간`으로 간주되어, 다른 객체 정보를 저장할 수 있게 됩니다.
3. Compacting: Sweeping이후에 필요하다면, 살아남은 객체들이 되도록 같은 공간에 존재할 수 있도록 객체들의 주소를 이동시킵니다. 이 절차는 위에 멘션한 `fragmentation`을 줄이고, 새로운 객체에 메모리가 할당되는 절차의 퍼포먼스를 향상시킬 수 있습니다.


마찬가지로 [Stop the world GC](https://texonom.com/stop-the-world-gc-5b16f1ca6ac3450bbf63e3bf56397538) 이라서 단점 최소화를 위해 아래 4개 technique

[V8 Incremental GC](https://texonom.com/v8-incremental-gc-c9a2e1f2610d4f039d376c024d86879b)


[V8 Concurrent marking](https://texonom.com/v8-concurrent-marking-97ff627b85df41fd97af2723e7432469)


[V8 Concurrent sweeping/compacting](https://texonom.com/v8-concurrent-sweepingcompacting-d1d919d829f84509b3aa8830c0ec1052)


[V8 Lazy sweeping](https://texonom.com/v8-lazy-sweeping-6a3363fd053042b0b42993345bfd6135)



> [자바스크립트와 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)





