0Pricing
Lua Academy · Lección

Conceptos básicos del recolector de basura de Lua

Aprenda cómo funciona el GC incremental de Lua: marcado y barrido, umbrales y collectgarbage().

Conceptos básicos del recolector de basura de Lua es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.

¿Qué es la recolección de basura?

Lua usa un recolector de basura automático para recuperar la memoria ocupada por objetos (tablas, cadenas y cierres) que ya no son accesibles desde ninguna raíz.

Algoritmo de marcado y barrido

El GC de Lua utiliza un algoritmo incremental de marcado y barrido. Primero marca todos los objetos accesibles desde las raíces y después barre (libera) los objetos no marcados.

Recolección incremental

El GC se ejecuta en pequeños incrementos intercalados con el programa. Esto evita pausas prolongadas. La cantidad de trabajo de cada incremento se controla mediante los parámetros de paso del GC.

Función collectgarbage

collectgarbage(opt, arg) controla directamente el 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

Parámetros del GC

collectgarbage("setpause", n) establece la pausa entre ciclos del GC (200 = duplica la memoria antes del ciclo siguiente). "setstepmul" controla la velocidad del GC.

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

Referencias débiles y GC

Normalmente, una referencia mantiene vivo un objeto. Una referencia débil no lo hace: el GC puede recopilar el objeto aunque una tabla débil lo apunte.

GC generacional (Lua 5.4)

Lua 5.4 introdujo un modo de GC generacional opcional. Los objetos jóvenes se recopilan con frecuencia y los antiguos, con menor frecuencia. Actívelo con collectgarbage("generational").

Desencadenadores de presión de memoria

El GC se ejecuta automáticamente cuando el uso de memoria supera un umbral (establecido mediante pause). Asignar muchas tablas temporales aumenta la presión del GC y puede ralentizar el programa.

Reducción de la presión del GC

  • Reutilice las tablas en lugar de crear otras nuevas.
  • Evite crear muchos cierres de corta duración en bucles críticos.
  • Preasigne los arrays cuyo tamaño conozca.

Internamiento de cadenas

Lua interna todas las cadenas: las cadenas idénticas comparten un objeto. Esto significa que crear una cadena requiere un hash O(n), pero compararla requiere O(1). Las cadenas cortas son muy económicas.

Finalizadores (__gc)

Las tablas pueden tener un metamétodo __gc al que llama el GC antes de liberar el objeto. Resulta útil para liberar recursos externos, como identificadores de archivos o punteros de C.

Pregunta sobre el GC

¿Qué devuelve collectgarbage("count")?

Resumen: conceptos básicos del GC de Lua

El GC incremental de marcado y barrido de Lua recupera automáticamente la memoria inaccesible. Use collectgarbage para supervisar y controlar la recolección. Reduzca la presión reutilizando tablas y evitando asignaciones excesivas en rutas críticas.

Preguntas frecuentes

¿La lección «Conceptos básicos del recolector de basura de Lua» es gratis?

Sí — el texto completo de «Conceptos básicos del recolector de basura de Lua» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Conceptos básicos del recolector de basura de Lua»?

Aprenda cómo funciona el GC incremental de Lua: marcado y barrido, umbrales y collectgarbage(). Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Lua Academy?

No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Conceptos básicos del recolector de basura de Lua»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Lua Academy?

Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Conceptos básicos del recolector de basura de Lua
  2. Claves y valores débiles
  3. Finalizadores con __gc
  4. Cómo evitar fugas de memoria
← Volver a Lua Academy