【发布时间】:2011-11-04 00:56:35
【问题描述】:
我有以下假设代码:
class User < ActiveRecord::Base
def oauth_consumer
@oauth_consumer ||= OauthConsumer.new(self)
end
end
class OauthConsumer
attr_reader :user, :access_token
def initialize(user)
@user = user
@access_token = OAuth::AccessToken.new(@user.token, @user.secret)
end
def get_posts_in_thread(thread_id)
response = access_token.get("/thread/#{thread_id}/user/#{user.id}")
JSON.parse(response.body)
end
end
user = User.new(:token => 'token', :secret => 'secret')
# I want to get the user's posts in thread #12345.
user.oauth_consumer.get_posts_in_thread(12345)
我想知道这是否会创建一个循环内存引用,其中user 具有对oauth_consumer 的引用,而oauth_consumer 具有对user 的引用,因此不可能被垃圾收集?
或者底层的 GC 实现(REE 1.8.7)是否处理这种情况?
【问题讨论】:
-
现代垃圾收集器几乎总能检测到循环引用。
-
谢谢,这个页面似乎也证实了这一点:pleac.sourceforge.net/pleac_ruby/classesetc.html
标签: ruby memory memory-management memory-leaks