Grundlagen des Lua-Garbage-Collectors
Erfahren Sie, wie Luas inkrementeller GC funktioniert: Mark-and-Sweep, Schwellenwerte und collectgarbage()
Grundlagen des Lua-Garbage-Collectors ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist Garbage Collection?
Lua verwendet einen automatischen Garbage Collector, um den von Objekten (Tabellen, Zeichenketten, Closures) belegten Speicher freizugeben, die von keiner Root mehr erreichbar sind.
Mark-and-Sweep-Algorithmus
Der GC von Lua verwendet einen inkrementellen Mark-and-Sweep-Algorithmus. Er markiert alle von Roots aus erreichbaren Objekte und räumt anschließend nicht markierte Objekte auf (gibt sie frei).
Inkrementelle Speicherbereinigung
Der GC läuft in kleinen, mit dem Programm verschachtelten Schritten. Dadurch werden lange Pausen vermieden. Der Arbeitsaufwand pro Schritt wird durch die Parameter für den GC-Schritt gesteuert.
collectgarbage-Funktion
collectgarbage(opt, arg) steuert den GC direkt.
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-Parameter
collectgarbage("setpause", n) legt die Pause zwischen GC-Zyklen fest (200 = doppelte Speichermenge vor dem nächsten Zyklus). "setstepmul" steuert die Geschwindigkeit des GC.
collectgarbage("setpause", 200) -- default
collectgarbage("setstepmul", 200) -- defaultSchwache Referenzen und GC
Normalerweise hält eine Referenz ein Objekt am Leben. Eine schwache Referenz tut dies nicht – der GC kann das Objekt auch dann sammeln, wenn eine Weak Table auf es verweist.
Generationaler GC (Lua 5.4)
Lua 5.4 führte einen optionalen generationalen GC-Modus ein. Junge Objekte werden häufig gesammelt, alte seltener. Aktivieren Sie ihn mit collectgarbage("generational").
Auslöser für Speicherdruck
Der GC läuft automatisch, wenn die Speichernutzung einen durch pause festgelegten Schwellenwert überschreitet. Viele temporäre Tabellen zu erstellen, erhöht den Speicherdruck und kann Ihr Programm verlangsamen.
GC-Druck reduzieren
- Verwenden Sie Tabellen wieder, statt neue zu erstellen.
- Vermeiden Sie es, in häufig durchlaufenen Schleifen viele kurzlebige Closures zu erstellen.
- Reservieren Sie Speicher für Arrays bekannter Größe im Voraus.
String-Interning
Lua interniert alle Zeichenketten – identische Zeichenketten verwenden dasselbe Objekt. Das bedeutet, dass das Erstellen einer Zeichenkette einen Hash-Aufwand von O(n) verursacht, der Vergleich aber O(1) benötigt. Kurze Zeichenketten sind sehr günstig.
Finalizer (__gc)
Tabellen können eine __gc-Metamethode besitzen, die vom GC aufgerufen wird, bevor das Objekt freigegeben wird. Dies ist nützlich, um externe Ressourcen wie Dateihandles oder C-Zeiger freizugeben.
GC-Frage
Was gibt collectgarbage("count") zurück?
Zusammenfassung: Lua-GC-Grundlagen
Der inkrementelle Mark-and-Sweep-GC von Lua gibt nicht erreichbaren Speicher automatisch frei. Verwenden Sie collectgarbage, um die Speicherbereinigung zu überwachen und zu steuern. Reduzieren Sie den Speicherdruck, indem Sie Tabellen wiederverwenden und übermäßige Speicherreservierungen in häufig ausgeführten Codepfaden vermeiden.
Häufig gestellte Fragen
Ist die Lektion „Grundlagen des Lua-Garbage-Collectors“ kostenlos?
Ja — der vollständige Text von „Grundlagen des Lua-Garbage-Collectors“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Grundlagen des Lua-Garbage-Collectors“?
Erfahren Sie, wie Luas inkrementeller GC funktioniert: Mark-and-Sweep, Schwellenwerte und collectgarbage() Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Lua Academy zu starten?
Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Grundlagen des Lua-Garbage-Collectors“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?
Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Grundlagen des Lua-Garbage-Collectors
- Schwache Schlüssel und schwache Werte
- Finalizer mit __gc
- Speicherlecks vermeiden