→ V8 memory structure 사용
: Java Script는 단일 스레드 - V8도 단일 프로세스를 사용하므로 서비스 작업자를 사용하면 작업당 새 V8 프로세스가 생성.
실행 중인 프로그램은 항상 V8 프로세스에서 할당된 메모리로 표시
= resident set
: 객체 또는 동적 데이터를 저장하는 곳
가비지 컬렉션이 발생하는 곳. 전체 힙 메모리에서 가비지 컬렉션이 발생하진 않고, Young & Old space에서만 관리된다.
: 새로운 객체가 저장되거나 대부분의 객체들이 잠깐 저장되는 곳. 이 공간은 작고 두 작은 공간이 있다. (JVM의 S0,S1과 비슷함) 이 공간은 Scavenger(Minor GC)
에 의해 관리된다고 함.
: 두개의 MinorGC 주기 동안 살아남은 객체가 이동되는 곳. Major GC(Mark-Sweep & Mark-Compact)
에서 관리
스택에서 더 이상 직접 또는 간접적으로 (다른 개체의 참조를 통해) 참조되지 않는 개체가 사용하는 메모리를 해제하여 새 개체 생성을 위한 공간을 만든다.
V8의 가비지 컬렉터는 두 세대로 나뉜다.
https://i.imgur.com/rcjSZ0T.mp4
실행중인 개체 마킹(DFS) → 가비지 콜렉터가 힙을 탐색하며 메모리 주소 기록 → 압축
가비지 콜렉터
https://proandroiddev.com/a-garbage-collection-story-2421b96e4c84
https://d2.naver.com/helloworld/1329
Mark & Sweep
- JVM , C# , Ruby , JavaScript 및 Golang
참조 카운팅
- PHP , Perl 및 Python
참조 : https://deepu.tech/memory-management-in-v8/
JVM stack and heap : https://www.youtube.com/watch?v=UzaGOXKVhwU
JVM garbage collector : https://www.youtube.com/watch?v=vZRmCbl871I&list=PLuvXomsX65mgmapU6rJ-UDROMOrzqyZVR&index=29