这段代码是否在Ruby中创建循环内存引用?
我有以下假设代码:这段代码是否在Ruby中创建循环内存引用?,ruby,memory,memory-management,memory-leaks,Ruby,Memory,Memory Management,Memory Leaks,我有以下假设代码: 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::Ac
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)
class用户'token',:secret=>'secret')
#我想在线程12345中获取用户的帖子。
user.oauth_consumer.get_posts_in_线程(12345)
我想知道这是否会创建一个循环内存引用,user
引用了oauth\u使用者
,而oauth\u使用者
引用了用户
,因此无法进行垃圾收集
或者底层GC实现(REE 1.8.7)是否处理了这种情况?以下讨论表明Ruby的GC appraoch(标记和扫描)处理循环引用:
现代垃圾收集器几乎总能检测到循环引用。谢谢,本页似乎也证实了这一点: