Lua Academy · Oppitunti

Luan roskankeräyksen perusteet

Tutkikaa Luan inkrementaalisen GC:n toimintaa: merkintä ja pyyhintä, kynnysarvot sekä collectgarbage().

Oppitunti 1/413 vaihetta

Luan roskankeräyksen perusteet on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.

Mitä roskienkeruu on?

Lua käyttää automaattista roskienkerääjää vapauttamaan olioiden (taulukoiden, merkkijonojen ja sulkeumien) käyttämän muistin, kun mihinkään juureen ei enää ole niihin viittausta.

Merkitse ja pyyhi -algoritmi

Luan roskienkeruu käyttää inkrementaalista merkitse ja pyyhi -algoritmia. Se merkitsee kaikki juurista saavutettavat oliot ja sitten pyyhkii (vapauttaa) merkitsemättömät oliot.

Inkrementaalinen roskienkeruu

Roskienkeruu suoritetaan pienissä vaiheissa ohjelman suorituksen lomassa. Tämä estää pitkät suoritustauot. Kunkin vaiheen työmäärää säätelevät GC-vaiheen parametrit.

collectgarbage-funktio

collectgarbage(opt, arg) ohjaa roskienkeruuta suoraan.

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

collectgarbage("setpause", n) asettaa GC-kierrosten välisen tauon (200 = muisti kaksinkertaistuu ennen seuraavaa kierrosta). "setstepmul" säätelee GC:n nopeutta.

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

Heikot viittaukset ja GC

Tavallisesti viittaus pitää olion elossa. Heikko viittaus ei pidä — GC voi kerätä olion, vaikka heikko taulukko viittaisi siihen.

Generatiivinen GC (Lua 5.4)

Lua 5.4 toi käyttöön valinnaisen generatiivisen GC-tilan. Nuoret oliot kerätään usein ja vanhat harvemmin. Tila vaihdetaan komennolla collectgarbage("generational").

Muistipaineen aiheuttajat

GC käynnistyy automaattisesti, kun muistin käyttö ylittää tauon määrittämän raja-arvon. Monien väliaikaisten taulukoiden varaaminen lisää GC:n kuormitusta ja voi hidastaa ohjelmaa.

GC-kuormituksen vähentäminen

  • Käyttäkää taulukoita uudelleen uusien varaamisen sijaan.
  • Välttäkää lyhytikäisten sulkeumien runsasta luomista suorituskykykriittisissä silmukoissa.
  • Varaa tunnetun kokoiset taulukot etukäteen.

Merkkijonojen internointi

Lua internioi kaikki merkkijonot — samanlaiset merkkijonot jakavat yhden olion. Merkkijonon luonti vaatii siis O(n)-aikaisen hajautuksen, mutta vertailu on O(1). Lyhyet merkkijonot ovat erittäin edullisia.

Lopettajat (__gc)

Taulukoilla voi olla __gc-metametodi, jonka GC kutsuu ennen olion vapauttamista. Se on hyödyllinen ulkoisten resurssien, kuten tiedostokahvojen tai C-osoittimien, vapauttamiseen.

GC:tä koskeva kysymys

Mitä collectgarbage("count") palauttaa?

Kertaus: Luan GC:n perusteet

Luan inkrementaalinen merkitse ja pyyhi -GC vapauttaa automaattisesti saavuttamattoman muistin. Käyttäkää collectgarbage-funktiota roskienkeruun tarkkailuun ja ohjaamiseen. Vähentäkää kuormitusta käyttämällä taulukoita uudelleen ja välttämällä liiallisia varauksia suorituskykykriittisissä kohdissa.

Aloita maksutta

Opi Lua tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
40
Oppitunnit
159

Usein kysytyt kysymykset

Onko oppitunti ”Luan roskankeräyksen perusteet” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Luan roskankeräyksen perusteet”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Luan roskankeräyksen perusteet”?

Tutkikaa Luan inkrementaalisen GC:n toimintaa: merkintä ja pyyhintä, kynnysarvot sekä collectgarbage(). Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Luan roskankeräyksen perusteet”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?

Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Luan roskankeräyksen perusteet
  2. Heikot avaimet ja arvot
  3. Lopettajat __gc:llä
  4. Muistivuotojen välttäminen
← Takaisin: Lua Academy