यहाँ थोड़ा अलग उदाहरण है, अंतिम संदर्भ प्रकार के स्थानीय चर की बजाय अंतिम संदर्भ-प्रकार वाले क्षेत्र:
public class MyClass {
public final MyOtherObject obj;
}
हर बार जब आप MyClass का एक उदाहरण बनाते हैं, तो आप एक MyOtherObject उदाहरण के लिए एक आउटगोइंग संदर्भ बना रहे होंगे, और जीसी को लाइव ऑब्जेक्ट देखने के लिए उस लिंक का पालन करना होगा।
जेवीएम एक मार्क-स्वीप जीसी एल्गोरिथ्म का उपयोग करता है, जिसे जीसी "रूट" स्थानों (वर्तमान कॉल स्टैक में सभी ऑब्जेक्ट्स की तरह) में सभी लाइव रिफ़ॉल्ल्स की जांच करनी होती है। प्रत्येक जीवित वस्तु को जीवित होने के रूप में "चिह्नित" किया जाता है, और किसी जीवित वस्तु द्वारा संदर्भित किसी भी वस्तु को जीवित होने के रूप में भी चिह्नित किया जाता है।
मार्क चरण के पूरा होने के बाद, जीसी ढेर के माध्यम से स्वीप करता है, सभी अचिह्नित वस्तुओं के लिए मेमोरी को मुक्त करता है (और शेष जीवित वस्तुओं के लिए मेमोरी को कॉम्पैक्ट करता है)।
इसके अलावा, यह पहचानना महत्वपूर्ण है कि जावा हीप मेमोरी को "युवा पीढ़ी" और "पुरानी पीढ़ी" में विभाजित किया गया है। सभी वस्तुओं को शुरू में युवा पीढ़ी में आवंटित किया जाता है (कभी-कभी "नर्सरी" के रूप में जाना जाता है)। चूंकि अधिकांश वस्तुएं अल्पकालिक हैं, जीसी युवा पीढ़ी से हाल ही में कचरा मुक्त करने के बारे में अधिक आक्रामक है। यदि कोई वस्तु युवा पीढ़ी के संग्रह चक्र से बच जाती है, तो वह पुरानी पीढ़ी में स्थानांतरित हो जाती है (कभी-कभी इसे "दस पीढ़ी" कहा जाता है), जिसे कम बार संसाधित किया जाता है।
इसलिए, मेरे सिर के ऊपर से, मैं कहने जा रहा हूं "नहीं, 'अंतिम' मोडिफ़र जीसी को अपने कार्यभार को कम करने में मदद नहीं करता है"।
मेरी राय में, जावा में अपने मेमोरी-मैनेजमेंट को अनुकूलित करने के लिए सबसे अच्छी रणनीति यह है कि संयमित संदर्भों को जितनी जल्दी हो सके समाप्त कर दिया जाए। आप इसका उपयोग करते हुए किसी ऑब्जेक्ट संदर्भ में "null" असाइन कर सकते हैं।
या, बेहतर अभी तक, प्रत्येक घोषणा क्षेत्र के आकार को कम से कम करें। उदाहरण के लिए, यदि आप 1000-लाइन विधि की शुरुआत में एक वस्तु की घोषणा करते हैं, और यदि वस्तु उस विधि के दायरे (अंतिम समापन घुंघराले ब्रेस) के करीब रहने तक जीवित रहती है, तो वह वस्तु ज्यादा समय तक जीवित रह सकती है ज़रूरी।
यदि आप केवल एक दर्जन या कोड की लाइनों के साथ छोटे तरीकों का उपयोग करते हैं, तो उस पद्धति के भीतर घोषित की गई वस्तुएं अधिक तेज़ी से दायरे से बाहर हो जाएंगी, और जीसी अपने अधिकांश कार्यों को बहुत अधिक कुशल के भीतर करने में सक्षम होगा युवा पीढ़ी। आप नहीं चाहते कि वस्तुओं को पुरानी पीढ़ी में स्थानांतरित किया जाए जब तक कि बिल्कुल आवश्यक न हो।