【问题标题】:Does this code create a circular memory reference in Ruby?此代码是否在 Ruby 中创建循环内存引用?
【发布时间】: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)是否处理​​这种情况?

【问题讨论】:

标签: ruby memory memory-management memory-leaks


【解决方案1】:

以下讨论表明 Ruby 的 GC 方法(标记和扫描)处理循环引用:

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

【讨论】:

    猜你喜欢
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2016-02-04
    • 2022-01-21
    相关资源
    最近更新 更多