这段代码是否在Ruby中创建了循环内存引用?

时间:2011-11-04 00:56:36

标签: 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::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)是否处理​​了这种情况?

1 个答案:

答案 0 :(得分:2)

以下讨论表明Ruby的GC appraoch(标记和扫描)应对循环引用:

http://www.ruby-forum.com/topic/85717