V8 engine에서의 JS Garbage Collection 에 대한 한가지 생각

이번 글을 통해 배워갈 내용
- V8 엔진
- Garbage Collection(GC)
- v8 Minor GC (Scavenger)
- v8 Major GC (full mark-compact)
V8 엔진
V8은 Chrome 및 Node.js 등에서 사용되는
Google의 오픈 소스 고성능 JavaScript 및 WebAssembly 엔진이며
C++로 작성되었습니다.
Garbage Collection(GC)
Gabage Collection은 동적으로 할당된 메모리가 필요 없게 되었을 때 정리해주는 기능입니다.
유효하지 않은 포인터, 이중 해제, 메모리 누수 등을 막는데 도움이 되나 어떤 메모리를 해제할지 결정하는데 비용이 들며 할당된 메모리가 해제되는 시점을 찾기가 힘듭니다.
V8 엔진은 크게 두 가지 GC를 가지고 있습니다. Scavenger라는 Minor GC와 Mark-Compact라는 Major GC입니다.
Major GC (full mark-compact)
major gc는 Garbage를 전체 힙 영역에서 가지고 옵니다.
Marking을 통해 어떤 Object가 Garbage Collection에 포함될지 확인하며 Marking은 확인된 Object Pointer부터 시작해서 GC 될 Object들을 찾아갑니다.
Sweeping은 Marking 후에 일어나며 free-list에 죽은(포인터가 되지 않는) object들을 넣어주고 추후 메모리가 필요할 경우 free-list를 참조해서 메모리를 할당합니다.
Compaction은 많이 쪼개진 페이지들에서 있는 Object들을 free-list를 사용해서 다른 페이지에서 사용하게 해 줍니다.
Minor GC (Scavenger)
minor gc는 새로 할당된 object들을 확인해서 임시로 쓰인 object, pointer 같은 것들을 정리해줍니다.
marking, evacuating, pointer upadating 등을 활용해서 메모리를 확보합니다.
Orinoco
Orinoco는 V8 GC 프로젝트에서 쓰는 코드네임입니다.
Garbage Collection을 하는 동안 Main thread가 멈추는데 이것을 GC 성능 측정을 위해서 활용하기도 합니다.
V8 내부에 있는 parallel, incremental 그리고 concurrent 테크닉들을 활용해서 GC 시간을 줄인 노력들의 흔적을 보면서 크롬과 Node에 쓰이는 V8에 GC 내부에 짧게 살아 숨 쉬는 object들을 비용적 측면에서 생각해본다면 작게나마 Javascript 메모리 관리나 프로그래밍 디자인 패턴의 관점에서 생각해보는데 도움이 될 것 같다는 생각이 들었습니다.
추가로 공부하시고자 하시는 분들은 아래 링크를 참조해주시면 됩니다.
힘든 일이 있으시다면 한번 활짝 웃어보세요~
기분이 좋아집니다.
하하하 호호호
오늘도 즐거운 일만 가득 있으시길 바랍니다.
V8 JavaScript engine
What is V8? V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++. It is used in Chrome and in Node.js, among others. It implements ECMAScript and WebAssembly, and runs on Windows 7 or later, macOS 10.12+, and Linu
v8.dev
Blog · V8
v8.dev
https://v8.dev/blog/free-garbage-collection
Getting garbage collection for free · V8
JavaScript performance continues to be one of the key aspects of Chrome’s values, especially when it comes to enabling a smooth experience. Starting in Chrome 41, V8 takes advantage of a new technique to increase the responsiveness of web applications by
v8.dev
https://v8.dev/blog/trash-talk
Trash talk: the Orinoco garbage collector · V8
Over the past years the V8 garbage collector (GC) has changed a lot. The Orinoco project has taken a sequential, stop-the-world garbage collector and transformed it into a mostly parallel and concurrent collector with incremental fallback. Note: If you pre
v8.dev