2012-11-29 26 views
3

當沒有變量指向對象時,對象中是否會發生任何特殊情況?除了有資格進行垃圾回收之外,也就是說。當沒有對它們的引用時,有沒有什麼特別的事情發生在對象上?

例如,目前,IO對象自動關閉when they're garbage collected,如果他們還沒有這樣做。即使你想改變這種行爲,也沒有辦法改變它,所以當沒有更多的變量指向對象時會發生自動關閉,是嗎?

(我的問題是一個小小的簡化:WeakRef允許變量指向對象,並使它們成爲垃圾收集的目標。另外,可以訪問沒有任何指向它們的變量的對象,對於某些實現通過使用ObjectSpace。關於IO對象,有一些東西,例如IO.open(&block),在塊被執行後自動關閉IO對象。)

+0

作爲回報,我的問題是,有沒有你正在解決的問題,或者是這個學術/好奇心?我希望看到一些代碼示例顯示問題/好奇心。 –

+0

如果需要,可以關閉GC。 –

+0

@theTinMan我試圖回答評論在http://stackoverflow.com/questions/764134/rubys-yield-feature-in-relation-to-computer-science/764862#comment18672522_764862,我只有95%肯定我對評論的迴應。 –

回答

1

不,沒有掛鉤或特殊方法在沒有更多引用時執行對象。

你提到的具體情況是:

  • 垃圾回收資源的自動關閉:這是一個終結在一個塊的末尾資源

  • 自動關閉來實現的:這裏沒有魔法

    class IO 
        def self.open(*args) 
        yield file_handle = new(*args) 
        ensure 
        file_handle.close 
        end 
    end 
    
  • WeakRef:there 魔術在這裏:-)在YARV中,lib/weakref.rb使用::ObjectSpace::WeakMap,它提供了弱引用語義。 JRuby使用Java的原生弱引用語義實現了WeakMap。 IOW:這個實際上不能用表示,它必須由運行時系統提供。

+0

加一個魔法! –

相關問題