Significado de Recolector de basura
Sustantivo masculino compuesto. De recolectar, del latín recollectus, y basura, voz de origen incierto.
El recolector de basura es el componente de un lenguaje de programación que identifica automáticamente la memoria que un programa ya no utiliza y la libera, sin que el programador tenga que hacerlo de forma manual.
Se llama «basura», en este contexto, a los datos que el programa creó en algún momento pero a los que ya no queda ninguna forma de acceder desde el código en ejecución.
Qué es el recolector de basura
Cada vez que un programa crea un dato en memoria, ese espacio debe liberarse en algún momento, o el programa acabará consumiendo toda la memoria disponible. En los lenguajes sin recolector de basura, esa liberación la decide el propio programador, línea a línea, con el riesgo de olvidar liberar algo (una fuga de memoria) o de liberarlo dos veces, o antes de tiempo, lo que puede colgar el programa. El recolector de basura resuelve ese problema asumiendo esa tarea de forma automática: examina periódicamente qué datos ya no son accesibles desde el código en ejecución y libera el espacio que ocupaban.
Esa comodidad tiene un coste real: el propio recolector consume tiempo de procesador para hacer su trabajo, y en algunos lenguajes ese trabajo puede pausar brevemente la ejecución del programa mientras revisa la memoria. En sistemas donde cada milisegundo importa —como el control de maquinaria en tiempo real— esas pausas pueden ser inaceptables, y por eso algunos lenguajes siguen dejando la gestión de memoria en manos del programador, a cambio de mayor control y previsibilidad.
Lo incorporan muchos lenguajes de programación modernos como parte de su funcionamiento interno, y lo estudian el diseño de lenguajes y la gestión de memoria dentro de la informática.
Origen del término recolector de basura
Traducción del inglés garbage collector, de garbage, «basura, desperdicio», y collector, «recolector». El nombre se acuñó en los primeros lenguajes que automatizaron la gestión de memoria, a mediados del siglo XX.
La idea nació en uno de los primeros lenguajes de programación de alto nivel, pensado para el procesamiento simbólico, que necesitaba crear y descartar estructuras de datos con mucha frecuencia. La técnica se refinó durante las décadas siguientes y se incorporó, ya de forma habitual, a numerosos lenguajes de programación posteriores, lo que popularizó tanto el mecanismo como el nombre que lo describe.
Tipos de recolección de basura
| Tipo | En qué consiste |
|---|---|
| Por conteo de referencias | Libera un dato en cuanto nada del programa vuelve a apuntar a él. |
| De marcado y barrido | Recorre periódicamente la memoria, marca lo accesible y libera lo que queda sin marcar. |
| Generacional | Revisa con más frecuencia los datos creados recientemente, porque suelen descartarse antes que los antiguos. |
Ejemplos de uso de recolector de basura
El recolector de basura liberó automáticamente la memoria de los objetos que ya no usaba el programa.
Una pausa larga del recolector de basura provocó que la aplicación se congelara un instante.
El lenguaje elegido para el proyecto no tiene recolector de basura, así que el equipo gestiona la memoria a mano.
El programador dejó una referencia olvidada que impedía al recolector de basura liberar ese dato.
Ajustaron el recolector de basura para que revisara la memoria con menos frecuencia y así reducir las pausas.
Sinónimos y palabras relacionadas
Sinónimos: recolección automática de memoria, gestión automática de memoria.
Antónimos: gestión manual de memoria.
No es lo mismo que:
- Fuga de memoria: es el problema que ocurre cuando algo impide liberar un dato que ya no se necesita, incluso con un recolector de basura activo; el recolector reduce ese riesgo, pero no lo elimina del todo.
- Memoria RAM: es el recurso físico que el recolector de basura administra; no son lo mismo el espacio de memoria y el mecanismo que decide cuándo liberarlo. Ver significado de memoria RAM.
- Puntero: es una referencia directa a una dirección de memoria; los lenguajes con recolector de basura suelen evitar exponer punteros directos al programador, precisamente para poder rastrear con seguridad qué sigue en uso.
Preguntas frecuentes sobre el recolector de basura
¿Todos los lenguajes de programación tienen recolector de basura?
No. Muchos lenguajes modernos lo incluyen, pero otros dejan la gestión de memoria en manos del programador, sobre todo cuando se necesita un control total sobre el rendimiento y los tiempos de ejecución.
¿Un recolector de basura puede ralentizar un programa?
Sí, en ciertos momentos: el recolector consume tiempo de procesador para revisar la memoria, y en algunos lenguajes esa revisión puede pausar brevemente la ejecución del programa mientras trabaja.
¿Puede seguir habiendo fugas de memoria con recolector de basura?
Sí. Si el código mantiene, por error, una referencia a un dato que ya no se necesita, el recolector no puede liberarlo, porque técnicamente sigue siendo accesible desde el programa.