0Pricing
Lua Academy · 강의

Lua 가비지 컬렉터 기초

Lua의 증분 GC가 표시-수거, 임계값, collectgarbage()를 통해 작동하는 방식을 배웁니다.

Lua 가비지 컬렉터 기초은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

가비지 컬렉션이란 무엇입니까?

Lua는 어떤 루트에서도 더 이상 도달할 수 없는 객체(표, 문자열, 클로저)가 차지하는 메모리를 회수하기 위해 자동 가비지 컬렉터를 사용합니다.

표시 및 제거 알고리즘

Lua의 GC는 증분 표시 및 제거 알고리즘을 사용합니다. 루트에서 시작하여 도달 가능한 모든 객체를 표시한 다음, 표시되지 않은 객체를 제거하여 메모리를 해제합니다.

증분 수집

GC는 프로그램 실행 사이사이에 작은 단위로 실행됩니다. 따라서 긴 일시 정지를 피할 수 있습니다. 각 증분 작업량은 GC 단계 매개변수로 제어됩니다.

collectgarbage 함수

collectgarbage(opt, arg)는 GC를 직접 제어합니다.

collectgarbage("collect")      -- run a full GC cycle
collectgarbage("stop")         -- stop automatic GC
collectgarbage("restart")      -- restart automatic GC
print(collectgarbage("count")) -- KB of memory in use

GC 매개변수

collectgarbage("setpause", n)은 GC 주기 사이의 일시 정지를 설정합니다(200은 다음 주기 전에 메모리를 두 배까지 사용한다는 의미입니다). "setstepmul"은 GC 속도를 제어합니다.

collectgarbage("setpause", 200)    -- default
collectgarbage("setstepmul", 200)  -- default

약한 참조와 GC

일반적으로 참조는 객체를 살아 있게 유지합니다. 하지만 약한 참조는 그렇지 않습니다. 약한 표가 객체를 가리키고 있어도 GC가 객체를 수집할 수 있습니다.

세대별 GC(Lua 5.4)

Lua 5.4에는 선택적으로 사용할 수 있는 세대별 GC 모드가 도입되었습니다. 새 객체는 자주 수집하고 오래된 객체는 덜 자주 수집합니다. collectgarbage("generational")로 전환할 수 있습니다.

메모리 압박을 일으키는 조건

메모리 사용량이 임계값을 초과하면 GC가 자동으로 실행됩니다(이 임계값은 일시 정지 설정으로 정해집니다). 임시 표를 많이 할당하면 GC 압박이 커져 프로그램이 느려질 수 있습니다.

GC 압박 줄이기

  • 새 표를 할당하는 대신 기존 표를 재사용하십시오.
  • 빈번한 반복문에서 수명이 짧은 클로저를 많이 만들지 마십시오.
  • 크기를 알고 있는 배열은 미리 할당하십시오.

문자열 인터닝

Lua는 모든 문자열을 인터닝합니다. 동일한 문자열은 하나의 객체를 공유합니다. 따라서 문자열 생성은 O(n) 해시 연산이지만 비교는 O(1)입니다. 짧은 문자열은 매우 저렴하게 처리됩니다.

종료자(__gc)

표에는 객체가 해제되기 전에 GC가 호출하는 __gc 메타메서드를 지정할 수 있습니다. 파일 핸들이나 C 포인터 같은 외부 자원을 해제할 때 유용합니다.

GC 질문

collectgarbage("count")는 무엇을 반환합니까?

복습: Lua GC 기초

Lua의 증분 표시 및 제거 GC는 도달할 수 없는 메모리를 자동으로 회수합니다. 수집을 모니터링하고 제어하려면 collectgarbage를 사용하십시오. 표를 재사용하고 자주 실행되는 경로에서 과도한 할당을 피하여 압박을 줄이십시오.

자주 묻는 질문

“Lua 가비지 컬렉터 기초” 강의는 무료인가요?

네 — “Lua 가비지 컬렉터 기초” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Lua 가비지 컬렉터 기초”에서 뭘 배우나요?

Lua의 증분 GC가 표시-수거, 임계값, collectgarbage()를 통해 작동하는 방식을 배웁니다. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Lua Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“Lua 가비지 컬렉터 기초” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Lua 가비지 컬렉터 기초
  2. 약한 키와 약한 값
  3. __gc를 이용한 종료 처리기
  4. 메모리 누수 방지
← Lua Academy(으)로 돌아가기