
이번 글을 통해 배워갈 내용
- 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
'Javascript > Javascript 기타' 카테고리의 다른 글
| 윈도우에서 node 버전 최신으로 관리하는 한가지 방법 (0) | 2023.12.04 |
|---|---|
| 프론트 엔드에서 CORS disabled 문제 5분안에 해결하는 한가지 방법 (0) | 2021.09.19 |
| 자바스크립트에서 점세개가 가지는 의미 (... in js) (1) | 2021.07.31 |
| 초간단 javascript Object destructuring (1) | 2021.06.15 |
| 자바스크립트로 원운동 x좌표 y좌표 만들기 (1) | 2021.06.07 |