Lua Academy · leksjon

Grunnleggende om Lua sin søppeltømmer

Lær hvordan Lua sin inkrementelle GC fungerer: markering og tømming, terskler og collectgarbage().

Leksjon 1 av 413 trinn

Grunnleggende om Lua sin søppeltømmer er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Hva er søppelinnsamling?

Lua bruker en automatisk søppelsamler for å frigjøre minne som opptas av objekter (tabeller, strenger og closures) som ikke lenger kan nås fra noen rot.

Mark-and-sweep-algoritmen

Luas GC bruker en inkrementell mark-and-sweep-algoritme. Den merker alle nåbare objekter fra røttene og sveiper deretter over og frigjør objekter som ikke er merket.

Inkrementell innsamling

GC kjører i små trinn som flettes inn mellom programoperasjonene. Dette unngår lange pauser. Mengden arbeid per trinn styres av parameterne for GC-trinn.

collectgarbage-funksjonen

collectgarbage(opt, arg) styrer GC direkte.

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-parametere

collectgarbage("setpause", n) angir pausen mellom GC-sykluser (200 = dobbelt så mye minne før neste syklus). "setstepmul" styrer GC-hastigheten.

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

Svake referanser og GC

Vanligvis holder en referanse et objekt i live. En svak referanse gjør ikke det – GC kan samle inn objektet selv om en svak tabell peker på det.

Generasjonell GC (Lua 5.4)

Lua 5.4 introduserte en valgfri generasjonell GC-modus. Unge objekter samles inn ofte, mens gamle objekter samles inn sjeldnere. Slå den på med collectgarbage("generational").

Utløsere for minnepress

GC kjører automatisk når minnebruken overskrider en terskel (angitt av pauseparameteren). Mange midlertidige tabeller øker belastningen på GC og kan gjøre programmet tregere.

Redusere belastningen på GC

  • Gjenbruk tabeller i stedet for å opprette nye.
  • Unngå å opprette mange kortlivede closures i varme løkker.
  • Forhåndsalloker arrayer med kjent størrelse.

String interning

Lua internrer alle strenger – identiske strenger deler ett objekt. Det betyr at oppretting av en streng har O(n)-kostnad for hashing, mens sammenligning har O(1)-kostnad. Korte strenger er svært kostnadseffektive.

Finalizere (__gc)

Tabeller kan ha en __gc-metamethod som kalles av GC før objektet frigjøres. Dette er nyttig for å frigi eksterne ressurser som filhåndtak eller C-pekere.

Spørsmål om GC

Hva returnerer collectgarbage("count")?

Oppsummering: Grunnleggende Lua-GC

Luas inkrementelle mark-and-sweep-GC frigjør automatisk minne som ikke kan nås. Bruk collectgarbage til å overvåke og styre innsamlingen. Reduser belastningen ved å gjenbruke tabeller og unngå overdreven allokering i varme kodebaner.

Gratis å komme i gang

Lær deg Lua med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
40
Leksjoner
159

Ofte stilte spørsmål

Er leksjonen «Grunnleggende om Lua sin søppeltømmer» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «Grunnleggende om Lua sin søppeltømmer», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Grunnleggende om Lua sin søppeltømmer»?

Lær hvordan Lua sin inkrementelle GC fungerer: markering og tømming, terskler og collectgarbage(). Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Lua Academy?

Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Grunnleggende om Lua sin søppeltømmer»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?

Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Grunnleggende om Lua sin søppeltømmer
  2. Svake nøkler og svake verdier
  3. Finalizere med __gc
  4. Unngå minnelekkasjer
← Tilbake til Lua Academy