반응형

gc쪽 공부하며 접한 부분들 정리 해나가는 곳.

 

DCheck macro

DCheck : DCHECK는 디버그 모드에서 조건을 검증하기 위해 사용되는 매크로로, C++ 코드에서 DCHECK 매크로가 사용된 위치에서 주어진 조건이 참(true)인지 확인. 만약 조건이 거짓(false)이라면, 프로그램 실행을 중단하고 디버거에 진입하거나 오류 메시지를 출력. 이는 코드의 무결성을 확인하고 디버그 빌드에서 오류를 조기에 발견하기 위해 사용

 

DCHECK(condition): 조건이 참인지 확인
DCHECK_EQ(val1, val2): val1이 val2와 같은지 확인
DCHECK_NE(val1, val2): val1이 val2와 다른지 확인
DCHECK_LE(val1, val2): val1이 val2보다 작거나 같은지 확인
DCHECK_LT(val1, val2): val1이 val2보다 작은지 확인
DCHECK_GE(val1, val2): val1이 val2보다 크거나 같은지 확인
DCHECK_GT(val1, val2): val1이 val2보다 큰지 확인

 

 

https://source.chromium.org/chromium/chromium/src/+/main:v8/include/cppgc/;bpv=0;bpt=0

allocation.h : gc를 위한 메모리 할당 기능 정의
- allocationhandle{}  - garbage collected object들에 대한 메모리 할당관리

- AllocationDispatcher<> : 해당 구조체는 다양한 메모리 정렬 및 공간 설정에 따라 메모리를 할당하는 기능을 제공

- MakeGarbageCollectedTraitBase class: gc object를 위한 기본 할당 및 초기화 기능을 제공

   - call() 주어진 인자들을 통해 객체를 생성하고 초기화

CPPGC_DEFAULT_ALIGNED / CPPGC_DOUBLE_WORD_ALIGNED : 메모리 정렬을위한 macro

 

common.h : embedder의 stack state를 나타내는 enum을 정의

gc를 수행할 때, embedder stack의 kMayContainHeapPointers / kNoHeapPointers 를 참고하여  heap object를 가리키는 지 판별 후 gc하는 듯

 

cross-thread-persistent.h : 다중 스레드 간에 객체 참조를 유지하기 위한 기능 제공

PersistentBase : ASAN을 통해 poisoned memory에 접근하는 것을 허용. 

Known caveat : CTP사용시 주의사항 (ex. CTP는 객체를 가지고 있는 heap이 종료되는 것을 막지 못함, 객체를 소유한 스레드에서 다른 스레드로 이동할 수 있기에 그래프(?)를 통한 전이로 접근하는 것을 지원 X)

 

customspace.h : custom space 정의

customspaceindex{} : custom space를 index로 식별. kSpaceIndex로 유일하게 식별되어야 함. constexpr을 통해 초기화

CustomSpaceBase : 모든 custom spcae가 상속해야하는 기본 class.

compaction : 수동으로 조작되는 slot에 한해서 발생 -> 필요에 따라 기능 지원

 

default-platform.h : cppgc (C++ gc)에서 사용할 수 있는 기본 플랫폼을 정의, 다양한 시스템 자원 관리와 작업 스케줄링을 지원

DefaultPlatform() : 스레드 풀 크기, 유휴 작업 지원, 트레이싱 컨트롤러 등을 설정

foreground task runner : 메인 스레드(foreground thread)에서 실행해야 하는 작업들을 스케줄링하고 관리하는 역할

 

ephemeron-pair.h : EphemeronPair 구조체를 정의

ephemeron : key-value pairs in WeakMap and WeakSet -> 다른 모든 객체가 gc에 의해 표시된 후에만 그 활성도를 결정할 수 있는 약한 참조 객체

- WeakMember<K>는 약한 참조를 나타내며, Member<V>는 강한 참조를 나타남. 약한 참조는 gc에서 객체가 회수될 수 있도록 허용하지만, 강한 참조는 X

- value 객체는 key 객체가 살아있는 경우에만 유지=. key 객체가 죽으면 value 객체에 대한 참조도 제거

ex. event listener가 특정 객체에만 적용되어야 하는 경우, EphemeronPair를 사용하여 event listener를 해당 객체가 살아있-는 동안에만 유지

- 캐시에서 키-값 쌍을 관리할 때, 키가 무효화되면 값도 자동으로 제거

 

 

반응형

'v8' 카테고리의 다른 글

Memory management of the V8 Engine  (0) 2024.07.12
V8 extras  (0) 2024.05.06
Jank Busters Part One  (0) 2024.05.05
Custom startup snapshots  (0) 2024.04.25
Code caching  (0) 2024.04.23

+ Recent posts