Basura (informática)


En informática , la basura incluye datos , objetos u otras regiones de la memoria de un sistema informático (u otros recursos del sistema), que no serán utilizados en ningún cálculo futuro por el sistema o por un programa que se ejecute en él. Debido a que cada sistema informático tiene una cantidad finita de memoria y la mayoría del software produce basura, con frecuencia es necesario desasignar la memoria que está ocupada por la basura y devolverla al montón , o grupo de memoria, para su reutilización.

La basura se clasifica generalmente en dos tipos: basura sintáctica , cualquier objeto o dato que se encuentre dentro del espacio de memoria de un programa pero que no se pueda alcanzar desde el conjunto raíz del programa ; y basura semántica , cualquier objeto o dato al que nunca accede un programa en ejecución para cualquier combinación de entradas de programa. Se dice que los objetos y datos que no son basura están activos .

Dicho de manera casual, la basura sintáctica son datos a los que no se puede acceder, y la basura semántica son datos a los que no se llega. Más precisamente, la basura sintáctica son datos a los que no se puede acceder debido al gráfico de referencia (no hay una ruta hacia él), que se puede determinar mediante muchos algoritmos, como se explica en Seguimiento de la recolección de basura , y solo requiere analizar los datos, no el código. La basura semántica son datos a los que no se accederá, ya sea porque es inalcanzable (por lo tanto, también basura sintáctica), o es accesible pero no se accederá a ellos; esto último requiere un análisis del código y, en general, es un problema indecidible .

La basura sintáctica es un subconjunto (generalmente estricto) de basura semántica, ya que es completamente posible que un objeto tenga una referencia a otro objeto sin siquiera usar ese objeto.

En la siguiente implementación de pila simple en Java, cada elemento extraído de la pila se convierte en basura semántica una vez que no hay referencias externas a él: [a]

Esto se debe a que elements[]todavía contiene una referencia al objeto, pero nunca se volverá a acceder al objeto a través de esta referencia, porque elements[]es privado para la clase y el popmétodo solo devuelve referencias a elementos que aún no ha aparecido. (Después de que disminuya size, esta clase nunca volverá a acceder a ese elemento). Sin embargo, saber esto requiere un análisis del código de la clase, que es indecidible en general.