jueves, 12 de agosto de 2010

Garbage Collector - Beneficios y Perjuicios

Garbage Colector  (GC) es una forma de manejo de memoria que es automática, cuyo modo de funcionamiento es liberar la memoria gastada por objetos que ya no se usan, permitiendo que ésta se pueda usar en otros objetos (como una especie de reciclaje). 

Beneficios

  1. Logicamente, al ser automático, el programador no tiene que preocuparse por la gestión de la memoria (no tiene que crear por si mismo destructores, ni tiene que preocuparse por  memoria desperdiciada), lo que lleva a crear una aplicación en un tiempo menor y mayor dedicación a  elementos centrales del programa. También, es observable que solo se necesita un Garbage Collector para todos los objetos, mientras que si se quieren diseñar objetos con destructores, hay que crear un destructor para cada tipo de objeto.
  2. Su independencia tambien permite evitar errores de "ubicación" de memoria (errores con los punteros), es decir, que no se permite que  la memoria quede liberada con ese espacio designado para el objeto que se finalizó. Si esto no se diera, la consecuencia sería que otro objeto probablemente use la misma ubicación de memoria y al suponerse esta como usada aparecen múltiples errores en la aplicación (los errores corresponderían a la función del objetos involucrados).
  3. Se evita la fragmentación de memoria ya que la forma de operar del Garbage Collector es parecido el objetivo del juego llamado tetris: Ir ocupando y liberando la memoria con objetos de tal modo que no queden espacios vacios entre cada objeto (el objeto es como una ficha). La diferencia es que en  la gestión de memoria los vacios se generan de la limpieza de memoria. Entonces, se hace necesario que se comprima toda la memoria para dejar más espacio para futuros objetos, los cuales se encuentran en una especie de lista para llegar a su ubicación de memoria. Si no estuviese comprimida la memoria luego de limpiarse, el "montón" crecería cada vez más degradando el rendimiento a tal punto de consumir toda la memoria.
  4. Se evitan problemas de "doble liberación de memoria": Si un destructor está mal hecho, puede que intente liberar una parte de la memoria que ya se había liberado, y esta puede estar siendo usada por un nuevo objeto, lo que conlleva a errores lógicos en el programa.  En cambio el Garbage Collector, se encarga de dejar la ubicación memoria liberada como vacia para que otro objeto pueda usarla y para que en otra búsqueda de basura, no elimine lo que se encuentra en ese espacio (claro está, que esa ubicación de memoria se liberará cuando el objeto finalice su función). Algo similar en la vida real podría ser cuando alguien trapea el piso: Puede que intente trapear por un lugar en el que ya lo había hecho, y si el trapero recogió mugre de otros sitios puede haberlo llevado a ese lugar.

Perjuicios

  1. Su nivel de independencia del programador también lleva a una desventaja que es contradictoria con respecto a su objetivo: El consumo de recursos de la máquina (computador), en el momento en que el GC tiene que averiguar y decidir que partes de la memoria son las adecuadas para ser liberadas. En este aspecto los destructores llevan la delantera, ya que al  ser creados por el programador, se dirijen a objetos especificos y simplemente tienen que liberar la memoria que estos usen al finalizar sus funciones. Es como si uno pusiera a otra persona a buscar algo que uno sabe donde está, la persona se pondría a pensar en que lugares es obvio que esté ese algo y luego se dirijiría a cada uno de esos sitios hasta hallarlo (actúa como un GC); sería más eficiente que uno mismo fuera por el objeto al sitio adecuado de inmediato (como un destructor, no se pone a plantear varios metodos, ni a buscar cual es la memoria correcta, sino que siencillamente está programado para la labor específica).
  2. Para que se lleve a cabo la búsqueda de partes de memoria que necesiten ser liberadas es obvio que se tiene que esperar cierto tiempo, lo que conlleva a que unos objetos no puedan utilizar la memoria de un objeto que finalizó su "labor"  hasta que el GC cumpla su función.  En este aspecto la delantera la llevan los destructores, puesto que si están bien hechos, se encargan de liberar la memoria en el momento exacto en que un objeto específico terminó de actuar. Por otro lado, en los interválos en que el GC no se encuentra en funcionamiento, puede acumularse la  memoria desperdiciada  ("basura"). En este aspecto de los Garbage Collector puede compararse en la vida real con un camión de basura: Si un camión falla un dia en pasar por la casa de alguien, puede que allí se acumule la basura en un lugar en el que la persona quería poner otra cosa. De aquí se deduce que puede ser difícil saber cuando usar el Garbage Collector, produciendo las consecuencias descritas anteriormente.
  3. Cada vez que se ejecuta el Garbage Collector, practicamente la aplicación se pausa, por lo que la ejecución de está se puede extender más del tiempo al que se había designado. Es posible que esto haga que programas con GC no sean los adecuados para programas que tienen actúar como un sistema de la vida real que funciona en un tiempo continúo (podría decirse  "tiempo real"). Por ejemplo si la aplicación usada en la bolsa de valores tuviera una pausa, podría llevar a  diferencias en las cantidades de dinero con respecto a las reales y como consecuencia pérdidas millonarias.
  4. El Garbage Collector solo elimina objetos que no tienen referencias (valor que relaciona clase, sus objetos  y el programa, como los punteros), entonces puede haber un desperdicio de memoria si el programa no está diseñado para que los objetos pierdan sus referencias al terminar lo que hacen. En cambio los destructores eliminan las referencias y conexiones del objeto por sí mismos, permitiendo obtener esa memoria extra.



1 comentario:

  1. Personalmente, preferiría el uso de destructores, ya que siento como más control sobre los objetos del programa. Aunque me demoraría más planeando el manejo de memoria.

    Por favor, aquellos que visiten este website dejen sus comentarios y opiniones.

    Gracias,

    ResponderEliminar