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

ibachue · 2012年04月20日 · 最后由 iBachue 回复于 2012年04月20日 · 1935 次阅读

请教大家,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 和里面的所有对象都还被用着,就不会去清掉了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号