रूबी में सभी वर्ग कक्षा कक्षा की वस्तुएं हैं। चूंकि कक्षाएं भी वस्तुएं हैं, क्या रूबी वीएम कक्षा वस्तुओं के लिए एक ही कचरा संग्रहण रणनीति का पालन करता है? क्या निर्धारित करता है कि कचरा संग्रह के लिए एक वर्ग वस्तु सुरक्षित है?रूबी क्लास ऑब्जेक्ट कचरा संग्रह
उत्तर
जब ऑब्जेक्ट से जोड़ने के लिए कुछ भी नहीं है, तो इससे छुटकारा पाने के लिए सुरक्षित है। जहां तक कचरा संग्रह चलाया जाता है, वह मेरे ज्ञान से परे है।
मुझे नहीं पता कि जवाब क्या है, लेकिन क्या आप प्रयोग से नहीं ढूंढ सकते? pickaxe पर एक नज़र डालें। मुझे यकीन है कि यह एक बहुत ही सरल परीक्षण है, और कोई बेहतर कर सकते हैं, लेकिन आप अंदाजा हो:
puts "program start"
include ObjectSpace
class SfbdTest
def initialize(a)
@a = a
end
end
define_finalizer(SfbdTest, proc{|id| puts "GC on class"})
puts "creating instance"
x = SfbdTest.new(1)
define_finalizer(x, proc{|id| puts "GC on instance"})
puts "zombie-ing instance"
x = nil
puts "forcing GC"
GC.start()
puts "program end"
का उत्पादन:
[email protected]:~$ ruby -w test.rb
program start
creating instance
zombie-ing instance
forcing GC
program end
GC on instance
GC on class
[email protected]:~$
ऐसा लगता है कि एक धागा जरूरत है, लेकिन दुर्भाग्य से मैं मुझे काम करना चाहिए, माफ करना ...
मैंने इसका परीक्षण किया, जवाब ऐसा लगता है कि ऐसा लगता है।
irb(main):001:0> x = [] #Memory Usage = 12MB
=> []
irb(main):002:0> 120000.times {x << Class.new} #Memory usage now at 41 MB
=> 120000
irb(main):013:0> x = []
=> []
irb(main):011:0> GC.start() #Memory usage now at 13MB
=> nil
एक और भी अधिक ठोस उदाहरण, एंड्रयू Cholakian के जवाब के लिए इसी तरह ObjectSpace उपयोग करने के लिए है। उदाहरण के लिए:
2.1.1 :001 > ObjectSpace.count_objects[:T_CLASS]
=> 884
2.1.1 :002 > 10000.times { Class.new }
=> 10000
2.1.1 :003 > ObjectSpace.count_objects[:T_CLASS]
=> 20884
2.1.1 :004 > GC.start
=> nil
2.1.1 :005 > ObjectSpace.count_objects[:T_CLASS]
=> 884
यह दिखाता है कि गुमनाम वर्गों (कहीं भी एक निरंतर में सहेजा या उन वर्गों में से किसी भी इंस्टेंस द्वारा नहीं किया जाता) वास्तव में कचरा एकत्र मिलता है।
- 1. रूबी: कचरा संग्रह
- 2. रूबी/रेल कचरा संग्रह
- 3. कचरा संग्रह
- 4. कचरा संग्रह
- 5. कचरा संग्रह
- 6. कचरा संग्रह का उपयोग?
- 7. जावा कचरा संग्रह
- 8. पायथन कचरा संग्रह
- 9. पायथन धागे कचरा संग्रह
- 10. कचरा संग्रह - रूट नोड्स
- 11. कचरा संग्रह और कागो
- 12. निजी क्षेत्रों का कचरा संग्रह
- 13. जावा क्लास कचरा संग्रह घटनाओं को कैसे प्रिंट करें?
- 14. हार्डवेयर असिस्टेड कचरा संग्रह
- 15. जावास्क्रिप्ट कचरा संग्रह
- 16. जावा कचरा संग्रह
- 17. कचरा संग्रह और स्ट्रिंग्स
- 18. Django Python कचरा संग्रह
- 19. बश में कचरा संग्रह
- 20. फोर्स कचरा संग्रह?
- 21. कोको कचरा संग्रह
- 22. कचरा संग्रह और धागे
- 23. .NET कचरा संग्रह लेटेंसी
- 24. आंतरिक संदर्भ कचरा संग्रह
- 25. कचरा संग्रह और प्रतिबिंब
- 26. देरी कचरा संग्रह?
- 27. मिस्ड कचरा संग्रह अधिसूचनाएं
- 28. जेवीएम कचरा संग्रह एल्गोरिदम
- 29. क्रॉस-रेफरेंस और कचरा संग्रह
- 30. सी # कचरा संग्रह सक्रिय रूट
यह सामान्य रूप से सच है, लेकिन कक्षाओं को एक विशेष मामले के रूप में देखा जा सकता है। उदाहरण के लिए यदि किसी वर्ग के पास कोई उदाहरण नहीं है और किसी अन्य वर्ग द्वारा उप-वर्गीकृत नहीं किया गया है तो इसमें कोई 'लिंक' नहीं है (जैसा कि आप कहते हैं) लेकिन क्या यह वास्तव में जीसी के लिए सुरक्षित है? क्या होगा यदि कोई व्यक्ति बाद की तारीख में इसका उदाहरण बनाना चाहता है। मुझे नहीं लगता कि स्थिति कक्षाओं के लिए स्पष्ट रूप से कटौती के रूप में है :) – horseyguy
@banister: यह वही मामला है जब मैं अन्य विशेष मामलों में इंगित करना चाहता था जहां एक जीसी को विशेष रूप से कक्षा वस्तु का इलाज करना पड़ सकता है रास्ता –
पर्याप्त मेला। एक वर्ग कुछ भी स्थिर नहीं है, है ना? और आप निरंतर से छुटकारा नहीं पा सकते हैं, क्योंकि यह पर्यावरण के भीतर एक चर है (भले ही यह आईआरबी, या रनटाइम की 'मुख्य' वस्तु है), जब तक पर्यावरण पूरा नहीं हो जाता है। "कक्षा स्ट्रिंग" "स्ट्रिंग = क्लास.न्यू" जैसी ही बात है। – Trevoke