दिलचस्प पोस्ट
कंटेनर-द्रव बनाम। कंटेनर जावा में छवि का आकार बदलना यूनिकोडडेकोडएअर: 'यूटीएफ -8' कोडेक बाइट को डीकोड नहीं कर सकता Xcode एक दुर्घटना का कारण बनता है जो लाइन नहीं दिखाता एक्सएचटीएमएल स्व-निहित टैग को छोड़कर RegEx मैच खुली टैग नंपी जगह में सरणी संशोधित? पायथन में एक स्ट्रिंग में दोहराए गए अक्षरों की गिनती ढाल पृष्ठभूमि के साथ CSS3 के संक्रमण का उपयोग करें क्यों कुछ प्रकार के शाब्दिक संशोधक नहीं हैं लोड पर Angular2 बहुत अधिक फ़ाइल अनुरोध मैं अतुल्यकालिक XMLHttpRequest के लिए कॉलबैक फ़ंक्शन का लाभ कैसे प्राप्त करूं? सीएसएस: कैसे बीच में पाठ के साथ वृत्त आकर्षित करने के लिए? फ़ॉर्म सबमिशन के बाद चयनित मान रखें डायरेक्टरी के लिए जांच और .NET में फाइल लिखने की अनुमति जावा Enum परिभाषा

जावा धागा कूड़ा एकत्र या नहीं

यह प्रश्न कुछ साइट पर पोस्ट किया गया था। मैंने वहां सही उत्तर नहीं मिला, इसलिए मैं इसे फिर से पोस्ट कर रहा हूं।

public class TestThread { public static void main(String[] s) { // anonymous class extends Thread Thread t = new Thread() { public void run() { // infinite loop while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { } // as long as this line printed out, you know it is alive. System.out.println("thread is running..."); } } }; t.start(); // Line A t = null; // Line B // no more references for Thread t // another infinite loop while (true) { try { Thread.sleep(3000); } catch (InterruptedException e) { } System.gc(); System.out.println("Executed System.gc()"); } // The program will run forever until you use ^C to stop it } } 

मेरी क्वेरी थ्रेड को रोकने के बारे में नहीं है मुझे अपना प्रश्न दोबारा बताएं लाइन ए (ऊपर कोड देखें) एक नया थ्रेड प्रारंभ करता है; और रेखा बी धागा संदर्भ नल बनाते हैं। इसलिए, जेवीएम में अब एक थ्रेड ऑब्जेक्ट है (जो राज्य चल रहा है) जिसमें कोई संदर्भ मौजूद नहीं है (जैसा कि लाइन बी में टी = रिक्त)। तो मेरा सवाल यह है, यह धागा (मुख्य थ्रेड में अब कोई संदर्भ नहीं) क्यों चल रहा है जब तक मुख्य धागा चल रहा है? मेरी समझ के अनुसार, थ्रेड ऑब्जेक्ट को कचरा एकत्रित किया जाना चाहिए लाइन बी बाद में। मैंने इस कोड को 5 मिनट और अधिक के लिए चलाने की कोशिश की, जीसी चलाने के लिए जावा रनटाइम का अनुरोध किया, लेकिन धागा अभी बंद नहीं हो रहा है।

आशा है कि कोड और सवाल दोनों इस समय स्पष्ट है।

वेब के समाधान से एकत्रित समाधान "जावा धागा कूड़ा एकत्र या नहीं"

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

इस पर विचार करें, आपका मुख्य धागा कचरा एकत्रित क्यों नहीं है, कोई भी इसका संदर्भ नहीं देता है।

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

हालांकि, आप एक थ्रेड को एक "डेमन" धागा बना सकते हैं (थ्रेड। Thread.setDaemon(boolean) ) कोई डेमॉन थ्रेड नॉन-डेमन थ्रेड से अधिक कचरा संग्रहण नहीं है, लेकिन JVM बाहर निकल जाता है जब सभी चल रहे थ्रेड डीमन होते हैं। यह कल्पना करने का एक तरीका यह है कि प्रत्येक धागा, जब यह समाप्त हो जाता है, तो जांचता है कि क्या कुछ गैर-डेमन चल रहे धागे बचे हैं; यदि नहीं, तो System.exit() थ्रेड System.exit() कॉल को मजबूर करता है, जो जेवीएम से बाहर निकलता है (रनिंग डेमन धागे को मारना)। यह कोई जीसी-संबंधित समस्या नहीं है; एक तरह से, धागे को मैन्युअल रूप से आवंटित किया जाता है हालांकि, यह कैसे है कि जेवीएम अर्द्ध-बदमाश धागे को बर्दाश्त कर सकता है। यह आमतौर पर Timer उदाहरणों के लिए उपयोग किया जाता है

JVM का चलना सभी थ्रेड्स का संदर्भ है।

कोई थ्रेड नहीं (या जो चीजें इसे संदर्भित करती है) कचरा एकत्रित हो जाएगी, जबकि यह अभी भी चल रहा है।

थ्रेड एकत्र कचरा नहीं है क्योंकि इसमें धागे के संदर्भ हैं जिन्हें आप नहीं देख सकते हैं। उदाहरण के लिए, रनटाइम सिस्टम में संदर्भ हैं।

जब धागा बनाया जाता है, तो यह वर्तमान धागा समूह में जोड़ा जाता है। आप वर्तमान थ्रेड समूह में थ्रेड्स की एक सूची प्राप्त कर सकते हैं, ताकि इसका एक संदर्भ प्राप्त करने का दूसरा तरीका हो।