2010-04-15 7 views
6

Me preguntaba si existe un método similar para los objetos Ruby, que los marca listos para la recolección de basura. Si creo 20,000 objetos y cada instancia tiene un contador, me gustaría que el objeto se marque para la recolección de basura cuando llegue a cero. Sé que esto es más o menos un enfoque de Java, pero no tengo suficiente experiencia con Ruby para entender cómo se podría hacer mejor.Ruby: Marque un objeto para la recolección de basura

¡Gracias por sus respuestas, comentarios y comentarios!

+2

finalize no marca objetos para la recolección de basura, es un método que se ejecuta (aunque no hay garantía) justo antes de que el GC elimine el objeto – pablochan

+0

Eso es bueno saber, gracias por señalarlo. ¿Hay algún método específico que destruya explícitamente el objeto o al menos ponga esto en movimiento? Me gusta la magia, pero también me gusta entender los trucos expuestos. – Shyam

+1

Solo necesita eliminar todas las referencias al objeto e. gramo. si tiene una referencia x, simplemente la establece en nulo o tiene una variable local que se sale del alcance. Si no hay referencias, un objeto está disponible para el GC. – pablochan

Respuesta

7

Por lo que yo sé, no se puede marcar un objeto listo para GC pero puede forzar GC en cualquier momento:

GC.start 

Si el artículo puede ser liberado, que serán liberados.

+5

Ya no es cierto desde MRI 1.9.3 introdujo el barrido lento GC – glebm

+1

Esta parte sigue siendo cierta: "no se puede marcar un objeto listo para GC". Ruby usa el enfoque opuesto: los objetos que se pueden alcanzar se marcan como "no eliminar". Todo lo demás se libera después de que se completa la fase de marca. Esto no ha cambiado, simplemente no ocurre inmediatamente cuando llamas a 'GC.start' –

Cuestiones relacionadas