2010-01-12 13 views

उत्तर

29

ऑब्जेक्ट्स में अन्य ऑब्जेक्ट्स के संदर्भ हैं जो बदले में प्रारंभिक ऑब्जेक्ट सहित अधिक ऑब्जेक्ट्स के संदर्भ हो सकते हैं। यह वस्तुओं का एक ग्राफ बनाता है, पहुंच योग्यता विश्लेषण में उपयोगी है। उदाहरण के लिए, यदि प्रारंभिक वस्तु पहुंच योग्य है (कहें कि यह थ्रेड के स्थानीय ढेर में है) तो ग्राफ में सभी ऑब्जेक्ट पहुंच योग्य हैं और सटीक कचरा कलेक्टर इन वस्तुओं में से किसी भी फसल को फसल नहीं कर सकता है। इसी तरह, यदि हम सभी पहुंच योग्य वस्तुओं की एक सूची बनाते हैं, तो जीवित वस्तुओं (जड़ों) के एक सेट से शुरू होता है, अन्य सभी वस्तुएं कचरा होती हैं - संग्रह के लिए उचित खेल।

+1

पुन "सभी नहीं": मुझे लगता है कि, सभी वस्तुओं के पास अन्य वर्गों के संदर्भ हैं, कम से कम उनके वर्ग के संदर्भ में। – Thilo

+0

@ थिलो: अच्छा बिंदु। मैंने "सभी नहीं" हटा दिया है। –

+0

शायद प्राचीन प्रकार के सरणी नहीं ... – Thilo

5

वस्तु ग्राफ मूल रूप से वस्तुओं

यह निर्धारित करने के लिए जो वस्तुओं पहुंचा जा सकता है और प्रयोग किया जाता है जो निर्भरता ग्राफ है जो नहीं, ताकि सभी तक नहीं पहुंचा जा वस्तुओं कचरा संग्रहण के लिए पात्र बनाया जा सकता है।

+0

कोई व्यक्ति इस उत्तर को वोट क्यों देगा :) –

+0

मुझे नहीं पता। मैं डाउनवोट करने के इच्छुक था क्योंकि आपने निर्भरता ग्राफ को निर्भरता ग्राफ के रूप में वर्णित किया है :-) –

14

एक 'ऑब्जेक्ट ग्राफ' आपके ऑब्जेक्ट मॉडल (आपके प्रोग्राम में कक्षाएं) और उनके इंटरकनेक्शन से ऑब्जेक्ट्स के सभी उदाहरणों की अवधारणा है। उदाहरण के लिए

लें:

आप एक उदाहरण, Foo myFoo बनाने के लिए और फिर Bar myBar का एक उदाहरण बना सकते हैं और कनेक्ट उन्हें थे, तो दो वर्गों

Class Foo 
{ 
    String aString = "foo"; 
    Bar aBar; 
} 

Class Bar 
{ 
    String aString = "boo"; 
} 

है, myFoo.aBar = myBar;, अपने वस्तु ग्राफ होगा Bar के एक उदाहरण के संदर्भ में Foo का एक उदाहरण शामिल है।

कचरा कलेक्टर अनिवार्य रूप से ऑब्जेक्ट ग्राफ़ का उपयोग करता है यह निर्धारित करने के लिए कि स्मृति में कौन से उदाहरण अभी भी प्रोग्राम से आवश्यक हैं और संभावित रूप से प्रोग्राम द्वारा आवश्यक हैं, और कौन से उदाहरण अब उपलब्ध नहीं हैं और इसलिए हटाया जा सकता है। wikipedia पर


किसी ने इसे और अधिक अर्थपूर्ण डालता है मुझ से:

वस्तु उन्मुख अनुप्रयोगों परस्पर वस्तुओं की जटिल जाले होते हैं। ऑब्जेक्ट्स द्वारा ऑब्जेक्ट्स एक दूसरे से जुड़े होते हैं या तो एक ऑब्जेक्ट या तो किसी अन्य ऑब्जेक्ट का स्वामित्व या किसी अन्य ऑब्जेक्ट पर संदर्भ रखते हैं। ऑब्जेक्ट्स के इस वेब को ऑब्जेक्ट ग्राफ़ कहा जाता है और यह अधिक सार संरचना है जो किसी अनुप्रयोग के स्थिति पर चर्चा करने में उपयोग की जा सकती है।

6

हम किस बारे में बात कर रहे हैं वह एक निर्देशित ग्राफ की गणितीय धारणा है जिसमें नोड्स को जोड़ने वाले नोड्स और किनारों का समावेश होता है। एक ऑब्जेक्ट ग्राफ़ कुछ ग्राफ होता है जिनके नोड्स ऑब्जेक्ट होते हैं, और जिनके किनारों के बीच रुचि के संबंध होते हैं।

जावा कचरा कलेक्टर के मामले में, चिंता का ऑब्जेक्ट ग्राफ़ पहुंच योग्य वस्तुओं का ग्राफ है। इस आलेख में, नोड्स जावा ऑब्जेक्ट्स हैं, और किनारें स्पष्ट या निहित संदर्भ हैं जो किसी चल रहे प्रोग्राम को किसी अन्य ऑब्जेक्ट से "पहुंचने" की अनुमति देती हैं। (एक अंतर्निहित संदर्भ के उदाहरण के लिए, किसी ऑब्जेक्ट से क्लास ऑब्जेक्ट में एक अंतर्निहित संदर्भ है, और इसलिए क्लास स्टेटिक्स और उसके कोड को पकड़ने वाले ढेर ऑब्जेक्ट्स में ... लेकिन मैं digress।)

जैसा कि @ कंधरा पटना ने समझाया है, कचरा संग्रह पहुंचने योग्य ग्राफ को पार करने के द्वारा काम करता है जिसमें सभी ऑब्जेक्ट्स शामिल होते हैं जिन्हें शुरुआती बिंदुओं में से एक से प्राप्त किया जा सकता है; जीसी शब्दावली में "रूट सेट"। कोई भी ऑब्जेक्ट जो इस ग्राफ़ ट्रैवर्सल में नहीं मिलता है, अब गणना को प्रभावित नहीं कर सकता है, और इसलिए कचरा इकट्ठा करने योग्य है।

0

जैसा कि हम जानते हैं कि ऑब्जेक्ट्स कक्षा का उदाहरण हैं। किसी ऑब्जेक्ट में अन्य ऑब्जेक्ट (पते के लिए पॉइंटर्स का उपयोग) का संदर्भ हो सकता है। इन ऑब्जेक्ट्स में किसी अन्य ऑब्जेक्ट का संदर्भ हो सकता है और इसलिए ऑब्जेक्ट्स संदर्भों के एक पदानुक्रम में एक दूसरे के संदर्भ में हो सकता है।

यह ऑब्जेक्ट ग्राफ़ है।

0

ऑब्जेक्ट ग्राफ हमारे एप्लिकेशन/सॉफ़्टवेयर की कक्षाओं के उदाहरणों का एक नेटवर्क है जो वर्तमान में स्मृति में मौजूद है। देखने के लिए

क्लिक करें छवि: http://blog.ploeh.dk/content/binary/Windows-Live-Writer/Compose-object-graphs-with-confidence_921A/Tree_1.png

यह भी एक छोटे से एक वस्तु ग्राफ वस्तुओं की एक लंबी श्रृंखला हो सकती है। उदा। कहें कि हमारे पास एक आवेदन में पेटडॉग, मालिक, पेटकेनेल जैसी कक्षाएं हैं। अब, पेटडॉग के मालिक हैं, मालिक के पास एक या कई पेटडॉग हैं, पेटडॉग को पेटकेनेल से प्रशिक्षित किया जाता है और पेटकेनेल कई पेडडॉग ट्रेन करता है। अब ऑब्जेक्ट ओरिएंटेड दृष्टिकोण में उन रिश्ते के कार्यान्वयन पर हम, एक मालिक (आपको बताता है: एक मालिक/मालिक वर्ग का ऑब्जेक्ट) कई पेटडॉग उदाहरणों (यदि आपके पास केवल एक पालतू जानवर का संदर्भ है) , फिर एक पेटडॉग अपने विशेष मालिक के उदाहरण/वस्तु के संदर्भ में संदर्भित करता है (जो कि आप अपने कुत्तों के मामले में हैं, श्री जॉन को उनके कुत्ते द्वारा संदर्भित किया जाएगा), आपने अलग-अलग केनेल क्लब से पालतू कुत्ते को खरीदा होगा (जहां कुत्ते हैं प्रशिक्षित और बेचा जाता है) तो पेटडॉग उदाहरण/ऑब्जेक्ट संदर्भों में से प्रत्येक/अपने विशेष केनेल क्लब से जुड़ा हुआ है। यह एक-दूसरे से संबंधित वस्तुओं का एक जटिल नेटवर्क बनाता है।

यदि आप अपने नोट/स्केच बुक में सर्कल/स्क्वायर (या किसी भी आकार) के रूप में प्रत्येक उदाहरण/ऑब्जेक्ट्स (पेटडॉग, मालिक, पेटकेनेल की प्रत्येक वस्तु) का प्रतिनिधित्व करते हैं और ऑब्जेक्ट को लिंक करने वाले व्यक्ति का प्रतिनिधित्व करने के लिए तीर या रेखा खींचते हैं (संदर्भ) किस ऑब्जेक्ट के साथ आप ऑब्जेक्ट ग्राफ़ बनाते हैं।

कभी-कभी ऐसा होता है कि जब आप किसी भी वर्ग के उन उदाहरणों के बीच लिंक हटाते या बदलते हैं तो कुछ उदाहरणों को किसी भी अन्य उदाहरणों से संदर्भित नहीं किया जा सकता है जिसे कचरा कलेक्टर द्वारा हटा दिया जाएगा।

संबंधित मुद्दे