2010-08-05 12 views
8

यह बहुत बुनियादी हो सकता है, लेकिन जानना बहुत उत्सुक था। यहाँ कोड का टुकड़ा और उत्पादनयहां जीसी एकत्रित करना क्या है?

public class PlainSystemGC { 

    public static void main(String ...strings) { 

     System.out.println("Free Memory (Before GC): " + Runtime.getRuntime().freeMemory()); 

     System.gc(); 

     System.out.println("Free Memory (After GC): " + Runtime.getRuntime().freeMemory()); 
    } 
} 

और आउटपुट

Free Memory (Before GC): 1859640 
Free Memory (After GC): 1911768 

मैं पता है कि जी सी यहाँ एकत्रित कर रहा है के बाद से कोई ऑब्जेक्ट का निर्माण होगा दिलचस्पी है।

मुक्त होने वाली स्मृति क्या है? (और भी 52kb कि)


@JSauer - यह वास्तव में एक ही परिणाम भले ही चलाने 100 बार

+0

यह हमेशा एक जैसा नहीं है: http://ideone.com/5UkgE (122416 मुक्त) – NullUserException

+0

@NullUserExeception - स्मृति मुक्त होने की मात्रा अलग-अलग जेवीएमएस पर अलग हो सकती है, लेकिन मुक्त होकर संख्या पूरी हो जाएगी एक ही कोड के विभिन्न रन – JWhiz

उत्तर

9

सबसे JVM कार्यान्वयन पर main विधि वास्तव में उस चलाया जाता है जावा कोड के पहले टुकड़ा नहीं है देता है JVM स्टार्टअप के दौरान।

आमतौर पर, पूर्ण जेआरई के कई हिस्सों को स्वयं जावा में लागू किया जाता है। उदाहरण के लिए शुद्ध जावा में क्लासलोडर तंत्र का एक बड़ा हिस्सा लागू किया गया है। यह जावा में कचरा संग्रह एल्गोरिदम के हिस्सों को भी लिखने में सक्षम हो सकता है।

इसके कारण, उन सिस्टम कक्षाओं से पहले से ही कुछ कचरा हो सकता है जो जीसी एकत्र कर सकते हैं भले ही आपके एप्लिकेशन ने कोई कचरा नहीं बनाया हो।

वैसे, आपके आवेदन कम से कम एक उद्देश्य यह है कि बिंदु पर कचरा संग्रहण जहां System.gc() कहा जाता है के लिए पात्र है बनाता है: String कहा गया है कि मुक्त स्मृति गतिशील और नहीं का निर्माण एक चर में आयोजित किया जाता है, तो यह अच्छी तरह से कर सकते थे System.gc() कॉल के दौरान जीसी-एड बनें।

+0

बहुत सच है। लेकिन, स्ट्रिंग निश्चित रूप से 52K स्मृति का उपभोग नहीं करेगी;) मेरा मानना ​​है कि ... – JWhiz

+0

इसके अतिरिक्त, एक स्थिर क्षेत्र का उपयोग करके क्लास-प्रारंभिक कोड चलाने के लिए कारण हो सकता है। उदाहरण के लिए, यदि सिस्टम क्लास पहले से पहले प्रारंभ नहीं किया गया था(), System.out का उपयोग करने से यह होगा। Http://java.sun.com/docs/books/jls/third_edition/html/execution.html#44557 पर भाषा विनिर्देश देखें। –

+1

मुझे संदेह है कि 'System.out' में उपयोग की जाने वाली 'स्ट्रिंग' कचरा एकत्रित होगी। भले ही यह एक चर में नहीं है, यह 'स्ट्रिंग' वर्ग द्वारा प्रशिक्षित है क्योंकि यह एक शाब्दिक है। – samitgaur

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