0Pricing
Lua Academy · Leçon

Notions de base sur le ramasse-miettes de Lua

Découvrez le fonctionnement du GC incrémental de Lua : marquage et balayage, seuils et collectgarbage().

Notions de base sur le ramasse-miettes de Lua est une leçon Lua Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Lua Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Lua Academy comprend 4 leçons au total.

Qu’est-ce que le ramasse-miettes ?

Lua utilise un ramasse-miettes automatique pour récupérer la mémoire occupée par les objets (tables, chaînes, fermetures) qui ne sont plus accessibles depuis aucune racine.

Algorithme de marquage et balayage

Le GC de Lua utilise un algorithme incrémentiel de marquage et de balayage. Il marque tous les objets accessibles à partir des racines, puis balaye et libère les objets non marqués.

Collecte incrémentielle

Le GC s’exécute par petites étapes entrelacées avec le programme. Cela évite les longues pauses. La quantité de travail effectuée à chaque étape est contrôlée par les paramètres de l’étape du GC.

Fonction collectgarbage

collectgarbage(opt, arg) contrôle directement le 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

Paramètres du GC

collectgarbage("setpause", n) définit la pause entre les cycles du GC (200 = mémoire doublée avant le cycle suivant). "setstepmul" contrôle la vitesse du GC.

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

Références faibles et GC

Normalement, une référence maintient un objet en vie. Une référence faible ne le fait pas : le GC peut récupérer l’objet même si une table faible le référence.

GC générationnel (Lua 5.4)

Lua 5.4 a introduit un mode de GC générationnel facultatif. Les objets jeunes sont récupérés fréquemment ; les objets anciens, moins souvent. Activez-le avec collectgarbage("generational").

Déclencheurs de pression mémoire

Le GC s’exécute automatiquement lorsque l’utilisation de la mémoire dépasse un seuil défini par la pause. Allouer de nombreuses tables temporaires augmente la pression exercée sur le GC et peut ralentir votre programme.

Réduire la pression du GC

  • Réutilisez les tables au lieu d’en allouer de nouvelles.
  • Évitez de créer de nombreuses fermetures à courte durée de vie dans les boucles très sollicitées.
  • Préallouez les tableaux dont la taille est connue.

Internement des chaînes

Lua internalise toutes les chaînes : les chaînes identiques partagent un même objet. La création d’une chaîne nécessite donc un calcul de hachage en O(n), tandis que la comparaison s’effectue en O(1). Les chaînes courtes sont très peu coûteuses.

Finaliseurs (__gc)

Les tables peuvent posséder une méthode de métatable __gc, appelée par le GC avant la libération de l’objet. Elle est utile pour libérer des ressources externes telles que des descripteurs de fichiers ou des pointeurs C.

Question sur le GC

Que renvoie collectgarbage("count") ?

Récapitulatif : notions de base du GC Lua

Le GC incrémentiel de marquage et de balayage de Lua récupère automatiquement la mémoire inaccessible. Utilisez collectgarbage pour surveiller et contrôler la collecte. Réduisez la pression en réutilisant les tables et en évitant les allocations excessives dans les chemins très sollicités.

Questions Fréquemment Posées

La leçon « Notions de base sur le ramasse-miettes de Lua » est-elle gratuite ?

Oui — le texte complet de « Notions de base sur le ramasse-miettes de Lua » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Lua Academy, passe à CoddyKit PRO. Le cours Lua Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Notions de base sur le ramasse-miettes de Lua » ?

Découvrez le fonctionnement du GC incrémental de Lua : marquage et balayage, seuils et collectgarbage(). Tu pratiques Lua Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Lua Academy ?

Aucune expérience préalable n'est requise. Lua Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Notions de base sur le ramasse-miettes de Lua » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Lua Academy ?

Oui. Chaque leçon Lua Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Notions de base sur le ramasse-miettes de Lua
  2. Clés faibles et valeurs faibles
  3. Finaliseurs avec __gc
  4. Éviter les fuites mémoire
← Retour à Lua Academy