Ruby 问下关于 ruby 抛出 exception 的问题

ibachue · April 20, 2012 · Last by iBachue replied at April 20, 2012 · 1935 hits

请教大家,ruby 中 class 的 initialize 函数如果抛出 exception,会不会造成 memory leak?

还有,ruby 在什么情况下会出现 memory leak?

谢谢

initialize 是在内存分配后调用的,所以(我猜想)有可能会 leak。这种情况下,因为 initialize 抛异常,代码中有可能拿不到新建对象的引用 (obj = Xxx.new, obj <= nil)。

最常见会出 memory leak 的地方是 collection 中引用了对象,而该 collection 又被其包含的对象间接引用。(即循环互相 hold 住了对方)。

GC 扫垃圾时,简单(但不一定真是这么作的)的方式是扫描所有对象,如果没有被引用到则杀掉。上面这种有互相引用的情况时,GC 发现 collection 和里面的所有对象都还被用着,就不会去清掉了。

You need to Sign in before reply, if you don't have an account, please Sign up first.