Luan roskankeräyksen perusteet
Tutkikaa Luan inkrementaalisen GC:n toimintaa: merkintä ja pyyhintä, kynnysarvot sekä collectgarbage().
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 useGC-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) -- defaultHeikot 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.
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
- Luan roskankeräyksen perusteet
- Heikot avaimet ja arvot
- Lopettajat __gc:llä
- Muistivuotojen välttäminen