8.5 垃圾收集器
垃圾收集器(Garbage Collector,GC)是现代软件虚拟机技术的重要组成部分,Java、Python包括Ruby等解释器语言都是采用垃圾收集的方式进行内存管理。GC把程序员从手工回收内存空间的繁重工作中解脱了出来。
Ruby提供了GC类和ObjectSpace类以提供垃圾收集功能,其中ObjectSpace类提供的垃圾收集功能只是提供了对GC.start方法的一个调用。
GC类只有disable、enable、start、garbage_collect 4个方法,其中前两个是关闭和启动垃圾收集器,start方法和garbage_collect意义相同,都是调用start方法实现垃圾收集功能。代码如下。
arr = Array.new(10000000,0)
arr = nil
GC.start
垃圾收集器的目标是:
· 回收已经无用的对象的内存空间,从而避免内存泄漏和程序因内存不断膨胀而崩溃;
· 判断一个对象的内存空间是否能被清空的标准是,该对象不再被程序中任何一个地方所引用(一般是指引用计数为0);
· 垃圾收集器线程定时轮询,但在系统的可用内存过低时会突然启动释放内存。
垃圾收集器执行的原则是:当对象的引用技术为0时清空对象。对象的引用采用“Copy on write”机制,这在Java和Delphi中很常见,如果要查看Copy on write机制的内存实现,可以参考Pascal中关于String对象的汇编代码。
Ruby的垃圾收集器相当优秀,可以保证Ruby的内存得到有效的释放。和其他一些脚本语言相比,Ruby的内存管理和垃圾收集机制非常占据优势。







