fbpx
Wikipedia

Recolector de basura

Un recolector de basura (del inglés garbage collector) es un mecanismo implícito de gestión de memoria implementado en algunos lenguajes de programación de tipo interpretado o semiinterpretado.

Recolección de basura informática. El espacio de memoria se va llenando con diferentes "objetos" (representados con colores), también pueden destruirse algunos de ellos, dejando "huecos" en el espacio de memoria. Cuando ya no queda espacio disponible, o cuando lo decide la rutina de recolección de basura, la memoria es "compactada", colocando todos los "objetos" que se están usando al principio, y consolidando todos los "huecos" de memoria al final, quedando así una gran área de memoria disponible para la futura creación de objetos.

Breve reseña histórica

El concepto de recolección de basura fue inventado por John McCarthy en 1958 para evitar la gestión manual de memoria en el lenguaje Lisp.[1]

Contexto

Cualquier programa informático hace uso de una cierta cantidad de memoria de trabajo puesta a su disposición por el sistema operativo. Esta memoria tiene que ser gestionada por el propio programa para:

  • Reservar espacios de memoria para su uso.
  • Liberar espacios de memoria previamente reservados.
  • Compactar espacios de memoria libres y consecutivos entre sí.
  • Llevar cuenta de qué espacios están libres y cuáles no.

Generalmente, el programador dispone de una biblioteca de código que se encarga de estas tareas. No obstante, el propio programador es responsable de utilizar adecuadamente esta biblioteca.

Esto tiene la ventaja de que se hace un uso eficiente de la memoria, es decir, los espacios de memoria quedan libres cuando ya no son necesarios. No obstante, este mecanismo explícito de gestión de memoria es propenso a errores. Por ejemplo, un programador puede olvidar liberar la memoria de manera que, tarde o temprano, no quede memoria disponible, abortando la ejecución del programa.

Como alternativa es necesaria una gestión implícita de memoria, con lo que el programador no es consciente de la reserva y liberación de memoria. Esto es obligado en algunos lenguajes de programación en los que no se maneja el concepto de memoria. Por ejemplo, en lenguajes declarativos como Lisp o Prolog.

Funcionamiento

Cuando un lenguaje dispone de recolección de basura, el programador no tiene que invocar a una subrutina para liberar memoria. La reserva de memoria también es más o menos automática sin la intervención del programador. Por ejemplo:

  • En los lenguajes orientados a objetos: se reserva memoria cada vez que el programador crea un objeto, pero este no tiene que saber cuánta memoria se reserva ni cómo se hace esto.
  • En los lenguajes declarativos: cada vez que se construye una expresión se reserva memoria (de una manera inteligente), pero el programador no es consciente de ello.

Cuando se compila el programa, automáticamente se incluye en este una subrutina correspondiente al recolector de basura. Esta subrutina también es invocada periódicamente sin la intervención del programador.

El recolector de basura es informado de todas las reservas de memoria que se producen en el programa. Además, el compilador colabora para que sea posible llevar una cuenta de todas las referencias que existen a un determinado espacio de memoria reservado.

Cuando se invoca el recolector de basura, recorre la lista de espacios reservados observando el contador de referencias de cada espacio. Si un contador ha llegado a cero significa que ese espacio de memoria ya no se usa y, por tanto, puede ser liberado.

Naturalmente, este proceso consume un cierto tiempo en el que no se hace nada verdaderamente útil para el propósito del programa. Por tanto, no puede ser invocado con demasiada frecuencia.

En consecuencia, el único inconveniente a este mecanismo es determinar cuándo se tiene que ejecutar el recolector de basura. Existen varios algoritmos para hacerlo, pero el más eficiente es el primero de ellos:

  • Esperar a que no quede memoria libre, y entonces, ejecutar el recolector de basura.
  • Fijar un umbral de ocupación de la memoria libre y ejecutar el recolector de basura cuando se supere dicho umbral.
  • Ejecutar el recolector de basura a intervalos regulares (no siempre es posible).
  • Ejecutar el recolector de basura justo antes de cada reserva de memoria.
  • Permitir al programador que invoque explícitamente al recolector de basura cuando quiera.

Ventajas y desventajas

Las ventajas y desventajas de este mecanismo de gestión de memoria son las opuestas al mecanismo explícito:

  • El programador no puede cometer errores y queda liberado de la tediosa tarea de gestionar la memoria.
  • La memoria permanece retenida durante más tiempo del estrictamente necesario.
  • El recolector de basura tarda cierto tiempo en hacer su tarea y produce pausas que pueden hacer la técnica incompatible con sistemas de tiempo real.

Implementación

Existe la posibilidad de implementar la recolección de basura como una biblioteca de código más, pero por norma general no es así. El propio diseño de ciertos lenguajes de programación hace necesaria la existencia del recolector de basura. Para poder implementar estos lenguajes se requieren dos actuaciones:

  • Que el compilador proporcione la información necesaria para el recolector de basura (el contador de referencias).
  • Que el entorno de ejecución o máquina virtual implemente la subrutina del recolector de basura.

Ejemplos de lenguajes con recolector de basura

Véase también

Referencias

  1. McCarthy, John (30 de abril de 1960). (pdf). Universidad Stanford (en inglés). p. 27. Archivado desde el original el 26 de noviembre de 2001. Consultado el 14 de abril de 2020. «We already called this process “garbage collection”, but I guess I chickened out of usingit in the paper—or else the Research Laboratory of Electronics grammar ladies wouldn’t let me.» 

Enlaces externos

  • The Memory Management Reference (en inglés)
  • (en inglés)
  •   Datos: Q322202

recolector, basura, recolector, basura, inglés, garbage, collector, mecanismo, implícito, gestión, memoria, implementado, algunos, lenguajes, programación, tipo, interpretado, semiinterpretado, recolección, basura, informática, espacio, memoria, llenando, dife. Un recolector de basura del ingles garbage collector es un mecanismo implicito de gestion de memoria implementado en algunos lenguajes de programacion de tipo interpretado o semiinterpretado Recoleccion de basura informatica El espacio de memoria se va llenando con diferentes objetos representados con colores tambien pueden destruirse algunos de ellos dejando huecos en el espacio de memoria Cuando ya no queda espacio disponible o cuando lo decide la rutina de recoleccion de basura la memoria es compactada colocando todos los objetos que se estan usando al principio y consolidando todos los huecos de memoria al final quedando asi una gran area de memoria disponible para la futura creacion de objetos Indice 1 Breve resena historica 2 Contexto 3 Funcionamiento 4 Ventajas y desventajas 5 Implementacion 6 Ejemplos de lenguajes con recolector de basura 7 Vease tambien 8 Referencias 9 Enlaces externosBreve resena historica EditarEl concepto de recoleccion de basura fue inventado por John McCarthy en 1958 para evitar la gestion manual de memoria en el lenguaje Lisp 1 Contexto EditarCualquier programa informatico hace uso de una cierta cantidad de memoria de trabajo puesta a su disposicion por el sistema operativo Esta memoria tiene que ser gestionada por el propio programa para Reservar espacios de memoria para su uso Liberar espacios de memoria previamente reservados Compactar espacios de memoria libres y consecutivos entre si Llevar cuenta de que espacios estan libres y cuales no Generalmente el programador dispone de una biblioteca de codigo que se encarga de estas tareas No obstante el propio programador es responsable de utilizar adecuadamente esta biblioteca Esto tiene la ventaja de que se hace un uso eficiente de la memoria es decir los espacios de memoria quedan libres cuando ya no son necesarios No obstante este mecanismo explicito de gestion de memoria es propenso a errores Por ejemplo un programador puede olvidar liberar la memoria de manera que tarde o temprano no quede memoria disponible abortando la ejecucion del programa Como alternativa es necesaria una gestion implicita de memoria con lo que el programador no es consciente de la reserva y liberacion de memoria Esto es obligado en algunos lenguajes de programacion en los que no se maneja el concepto de memoria Por ejemplo en lenguajes declarativos como Lisp o Prolog Funcionamiento EditarCuando un lenguaje dispone de recoleccion de basura el programador no tiene que invocar a una subrutina para liberar memoria La reserva de memoria tambien es mas o menos automatica sin la intervencion del programador Por ejemplo En los lenguajes orientados a objetos se reserva memoria cada vez que el programador crea un objeto pero este no tiene que saber cuanta memoria se reserva ni como se hace esto En los lenguajes declarativos cada vez que se construye una expresion se reserva memoria de una manera inteligente pero el programador no es consciente de ello Cuando se compila el programa automaticamente se incluye en este una subrutina correspondiente al recolector de basura Esta subrutina tambien es invocada periodicamente sin la intervencion del programador El recolector de basura es informado de todas las reservas de memoria que se producen en el programa Ademas el compilador colabora para que sea posible llevar una cuenta de todas las referencias que existen a un determinado espacio de memoria reservado Cuando se invoca el recolector de basura recorre la lista de espacios reservados observando el contador de referencias de cada espacio Si un contador ha llegado a cero significa que ese espacio de memoria ya no se usa y por tanto puede ser liberado Naturalmente este proceso consume un cierto tiempo en el que no se hace nada verdaderamente util para el proposito del programa Por tanto no puede ser invocado con demasiada frecuencia En consecuencia el unico inconveniente a este mecanismo es determinar cuando se tiene que ejecutar el recolector de basura Existen varios algoritmos para hacerlo pero el mas eficiente es el primero de ellos Esperar a que no quede memoria libre y entonces ejecutar el recolector de basura Fijar un umbral de ocupacion de la memoria libre y ejecutar el recolector de basura cuando se supere dicho umbral Ejecutar el recolector de basura a intervalos regulares no siempre es posible Ejecutar el recolector de basura justo antes de cada reserva de memoria Permitir al programador que invoque explicitamente al recolector de basura cuando quiera Ventajas y desventajas EditarLas ventajas y desventajas de este mecanismo de gestion de memoria son las opuestas al mecanismo explicito El programador no puede cometer errores y queda liberado de la tediosa tarea de gestionar la memoria La memoria permanece retenida durante mas tiempo del estrictamente necesario El recolector de basura tarda cierto tiempo en hacer su tarea y produce pausas que pueden hacer la tecnica incompatible con sistemas de tiempo real Implementacion EditarExiste la posibilidad de implementar la recoleccion de basura como una biblioteca de codigo mas pero por norma general no es asi El propio diseno de ciertos lenguajes de programacion hace necesaria la existencia del recolector de basura Para poder implementar estos lenguajes se requieren dos actuaciones Que el compilador proporcione la informacion necesaria para el recolector de basura el contador de referencias Que el entorno de ejecucion o maquina virtual implemente la subrutina del recolector de basura Ejemplos de lenguajes con recolector de basura EditarALGOL 68 C Caml Clean D Eiffel Go Haskell Java JavaScript Lisp Lua Mercury ML Modula 3 Nim Oberon Oz Objective C 2 0 Pauscal Perl PHP Prolog Python Ruby Smalltalk SNOBOL SuperCollider Visual Basic NETVease tambien EditarConteo de referencias Fuga de memoriaReferencias Editar McCarthy John 30 de abril de 1960 Recursive Functions of Symbolic Expressions and Their Computation by Machine Part I Funciones recursivas de expresiones simbolicas y su computo por ordenador primera parte pdf Universidad Stanford en ingles p 27 Archivado desde el original el 26 de noviembre de 2001 Consultado el 14 de abril de 2020 We already called this process garbage collection but I guess I chickened out of usingit in the paper or else the Research Laboratory of Electronics grammar ladies wouldn t let me Enlaces externos EditarThe Memory Management Reference en ingles Recolector de basura para C y C en ingles Datos Q322202Obtenido de https es wikipedia org w index php title Recolector de basura amp oldid 125188462, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos