请教大家,ruby 中 class 的 initialize 函数如果抛出 exception,会不会造成 memory leak?
还有,ruby 在什么情况下会出现 memory leak?
谢谢
initialize 是在内存分配后调用的,所以(我猜想)有可能会 leak。这种情况下,因为 initialize 抛异常,代码中有可能拿不到新建对象的引用 (obj = Xxx.new, obj <= nil)。
initialize
最常见会出 memory leak 的地方是 collection 中引用了对象,而该 collection 又被其包含的对象间接引用。(即循环互相 hold 住了对方)。
GC 扫垃圾时,简单(但不一定真是这么作的)的方式是扫描所有对象,如果没有被引用到则杀掉。上面这种有互相引用的情况时,GC 发现 collection 和里面的所有对象都还被用着,就不会去清掉了。
#1 楼 @ashchan 恩 谢谢