लघु संस्करण: हाँ आप कर सकते हैं।
लांग संस्करण:
कैसे जावा/JVM स्मृति का प्रबंधन करता है
सबसे अनुप्रयोगों JVM चूक ठीक हैं। ऐसा लगता है कि जेवीएम अपेक्षा करता है कि एप्लिकेशन केवल सीमित अवधि तक चलें। इसलिए यह अपने आप पर मुफ्त स्मृति प्रतीत नहीं होता है।
क्रम तय करने के लिए कैसे और कब कचरा संग्रहण प्रदर्शन करने के लिए JVM मदद करने के लिए, निम्नलिखित मानकों आपूर्ति की जानी चाहिए:
-Xms
न्यूनतम ढेर आकार
–Xmx
निर्दिष्ट करता है अधिक से अधिक ढेर आकार निर्दिष्ट करता
सर्वर अनुप्रयोगों के लिए जोड़ें: -server
गु मेरे लिए पर्याप्त नहीं है। मुझे और नियंत्रण चाहिए!
यदि ऊपर उल्लिखित पैरामीटर पर्याप्त नहीं हैं, तो आप कचरा संग्रह के संबंध में JVM के व्यवहार को प्रभावित कर सकते हैं।
सबसे पहले आप वीएम को बताने के लिए System.gc()
का उपयोग कर सकते हैं जब आपको लगता है कि कचरा संग्रह समझ में आता है। और दूसरा आप निर्दिष्ट कर सकते हैं जो कचरा लेनेवालों की JVM उपयोग करना चाहिए:
कचरा कलेक्टरों के विभिन्न प्रकार:
सीरियल जीसी
कमांड लाइन पैरामीटर: -XX:+UseSerialGC
बंद हो जाता है आपका आवेदन और जीसी करता है।
समानांतर जीसी
कमांड लाइन पैरामीटर: -XX:+UseParallelGC -XX:ParallelGCThreads=value
रन नाबालिग संग्रह अपने आवेदन के साथ समानांतर में। प्रमुख संग्रह के लिए आवश्यक समय कम करता है, लेकिन अन्य धागे का उपयोग करता है।
समानांतर को संक्षिप्त करने जीसी
कमांड लाइन पैरामीटर: -XX:+UseParallelOldGC
रन प्रमुख संग्रह अपने आवेदन के साथ समानांतर में। अधिक CPU संसाधनों का उपयोग करता है, स्मृति उपयोग को कम करता है।
सीएमएस जीसी
कमांड लाइन पैरामीटर: -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=value -XX:+UseCMSInitiatingOccupancyOnly
छोटे संग्रह करता है, और अधिक बार सीरियल जीसी, इस प्रकार आवेदन के टूट जाता है/बंद हो जाता है सीमित।
G1
कमांड लाइन पैरामीटर: -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC
प्रायोगिक (कम से कम जावा 1.6 में): सुनिश्चित करें कि आवेदन 1s से अधिक के लिए कभी नहीं रोका जाता है बनाने के लिए कोशिश करता है। किसी भी अनुकूलन के बिना एक प्ले फ्रेमवर्क वेब अनुप्रयोग के
उदाहरण
मेमोरी उपयोग: आप देख सकते हैं, यह काफी ढेर अंतरिक्ष के एक बहुत का उपयोग करता है, और उपयोग अंतरिक्ष नियमित रूप से मुक्त हो जाता है।
इस मामले में पैरामीटर के साथ अनुकूलन केवल प्रभावी नहीं थे। कुछ निर्धारित कार्य थे जो बहुत मेमोरी का इस्तेमाल करते थे। इस मामले में मेमोरी गहन परिचालन के बाद System.gc()
के साथ संयुक्त CMS GC
का उपयोग कर सर्वोत्तम प्रदर्शन प्राप्त किया गया था। नतीजतन वेब ऐप का मेमोरी उपयोग 1.8 जीबी से घटकर 400-500 एमबी हो गया।
नोट:: मैं "जीसी प्रदर्शन करना" के लिए VisualVM के बटन का इस्तेमाल किया
आप यहाँ VisualVM जो दिखाता है कि स्मृति JVM द्वारा मुक्त हो जाता है और वास्तव में ओएस के लिए वापस आ से दूसरे स्क्रीनशॉट देख सकते हैं मेरे कोड में System.gc()
के बजाय जीसी निष्पादित करें, क्योंकि निर्धारित कार्य जो स्मृति का उपभोग करते हैं केवल विशिष्ट समय पर लॉन्च किए जाते हैं और VisualVM के साथ कैप्चर करने में कुछ कठिन होता है।
अतिरिक्त पठन
मैं यह है कि क्या JVM आप उपयोग कर रहे पर निर्भर करता है लगता है। जेवीएम स्पेक इस बारे में कुछ भी नहीं कहता है, आईआईआरसी। – templatetypedef
क्या इसका मतलब यह है कि इसे आवंटित करने के बाद यह एप्लिकेशन के जीवन चक्र के लिए है? – jocull
कृपया जेवीएम उद्धृत करें जो ओएस को मेमोरी देता है। मैं एक के बारे में नहीं जानता। – duffymo