这段代码是否在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(标记和扫描)处理循环引用:


现代垃圾收集器几乎总能检测到循环引用。谢谢,本页似乎也证实了这一点: