gc_get_stats 함수 설명
gc_get_stats
함수는 현재 가비지 컬렉터의 상태에 대한 정보를 가져오는 기능을 제공합니다. 이 함수는 다음과 같은 멤버 변수를 가진 구조체를 반환합니다. 여기서 "objects"는 가비지 컬렉션이 가능한 모든 것을 의미하며, 자산 브라우저에서 정의된 일반 객체 인스턴스는 포함되지 않습니다.
GC Stats 구조체
변수 이름 | 타입 | 설명 |
---|---|---|
objects_touched | Real | 이전 프레임에서 가비지 컬렉터가 발견한 활성 객체의 수입니다. 세대에 따라 달라질 수 있습니다. |
objects_collected | Real | 이전 프레임에서 비활성으로 판단된 객체의 수입니다. 이 객체들은 삭제될 수 있습니다. |
traversal_time | Real | 활성 객체를 판단하는 데 걸린 시간(마이크로초)입니다. 주 스레드에서 실행됩니다. |
collection_time | Real | 비활성 객체를 정리하는 데 걸린 시간(마이크로초)입니다. 별도의 스레드에서 실행됩니다. |
gc_frame | Real | 가비지 컬렉션이 발생할 때마다 증가하는 카운터입니다. 가비지 컬렉션이 비활성화된 경우 증가하지 않습니다. |
generation_collected | Real | 마지막으로 수집된 세대의 인덱스입니다. 0은 가장 어린 세대, 3은 현재 가장 오래된 세대입니다. |
num_generations | Real | 가비지 컬렉션 세대의 총 수입니다. |
num_objects_in_generation | Array of Reals | 각 세대에 있는 객체의 수를 포함하는 배열입니다. 배열 크기는 num_generations입니다. |
참고: HTML5 플랫폼에서는 가비지 컬렉션이 JavaScript 엔진에 의해 처리되므로, 이 플랫폼에서 이 함수를 사용할 경우 위 구조체의 모든 멤버 변수는 0을 반환합니다.
이 함수를 사용할 때, 객체에 대한 정보는 전체 세대 처리가 완료될 때만 업데이트됩니다. 이 과정은 프레임 시간 설정에 따라 여러 프레임이 걸릴 수 있습니다.
구문
gc_get_stats();
반환값
GC Stats
구조체
예제
if (global.debug == true) {
var _s = gc_get_stats();
var _t = _s.traversal_time;
var _c = _s.collection_time;
show_debug_message("Traversal time = " + string(_t));
show_debug_message("Collection time = " + string(_c));
}
위 코드는 전역 변수를 확인하고, 만약 true
일 경우 가비지 컬렉터로부터 정보를 가져와 콘솔에 디버그 메시지로 출력합니다.
활용 예제
- 가비지 컬렉션 성능 모니터링
gml var stats = gc_get_stats(); if (stats.traversal_time > 1000) { show_debug_message("Traversal time is high!"); }
- 가비지 컬렉션 주기 조정
gml if (global.gc_frame % 10 == 0) { gc_enable(); }
- 세대별 객체 수 확인
gml var stats = gc_get_stats(); for (var i = 0; i < stats.num_generations; i++) { show_debug_message("Objects in generation " + string(i) + ": " + string(stats.num_objects_in_generation[i])); }
- 가비지 컬렉션 비활성화
gml gc_disable(); show_debug_message("Garbage collection disabled.");
- 가비지 컬렉션 상태 로그
gml var stats = gc_get_stats(); show_debug_message("GC Frame: " + string(stats.gc_frame)); show_debug_message("Objects Collected: " + string(stats.objects_collected));
이러한 예제들은 가비지 컬렉터의 상태를 모니터링하고, 성능을 최적화하며, 필요한 경우 가비지 컬렉션을 조정하는 데 유용합니다.