इस लेख में संदर्भित कोड एप्सिलॉन जीसी के संबंध में ओरेकल ब्लॉग पर उपलब्ध नमूना कोड से लिया गया है।
इस लेख में, हम जावा कचरा संग्रह (जीसी) में एक विशेष रूप से दिलचस्प विकल्प तलाशते हैं जिसे एप्सिलॉन जीसी के नाम से जाना जाता है। यह कचरा संग्रहण एल्गोरिदम अपनी विशिष्ट विशेषता के लिए उल्लेखनीय है: यह कोई कचरा संग्रहण नहीं करता है। एप्सिलॉन कचरा संग्रहकर्ता (जीसी) को जेडीके 11 में शामिल किया गया था।
लेकिन कचरा संग्रहकर्ता का क्या उपयोग है यदि वह कचरा एकत्र नहीं कर रहा है? (मुफ्तखोर हुंह!!)
नहीं, यह वास्तव में काफी उपयोगी है, ओरेकल ब्लॉग द्वारा प्रदान किया गया एक ऐसा उपयोगकेस, जिसे मैंने और अधिक उपयोगी बनाने के लिए थोड़ा बढ़ाया है।
अधिक जानकारी के लिए, कृपया मूल ब्लॉग पोस्ट देखें:
https://blogs.oracle.com/javamagazine/post/epsilon-the-jdks-do-nothing-garbage-collector
उपयोगकेस: एप्सिलॉन जीसी उन डेवलपर्स के लिए फायदेमंद है, जिन्हें प्रोफाइलिंग टूल की सहायता के बिना कोड के एक विशेष खंड के लिए मेमोरी आवंटन का आकलन करने की आवश्यकता होती है।
प्राथमिक चुनौती पारंपरिक कचरा संग्रहकर्ता वस्तुओं को लगातार साफ करके सटीक मेमोरी उपयोग मेट्रिक्स को अस्पष्ट कर सकते हैं। यह हस्तक्षेप आपके कोड की वास्तविक मेमोरी खपत का पता लगाना कठिन बना देता है।
एप्सिलॉन जीसी एक गैर-संग्राहक के रूप में कार्य करके इस समस्या का समाधान करता है। हालांकि यह एक कचरा संग्रहण एल्गोरिदम नहीं है, यह किसी भी कचरा संग्रह को करने से परहेज करके मेमोरी आवंटन को समझने के लिए एक उपकरण के रूप में कार्य करता है, जिससे मेमोरी उपयोग की स्पष्ट तस्वीर मिलती है।
नोट: यह जानना महत्वपूर्ण है कि चूंकि एप्सिलॉन जीसी मेमोरी को पुनः प्राप्त नहीं करता है, इसलिए अत्यधिक आवंटन से जेवीएम में आउटऑफमेमरी एरर (ओओएम) हो सकता है।
नीचे नमूना कोड है जिसका उपयोग एप्सिलॉन जीसी की प्रभावकारिता को प्रदर्शित करने के लिए किया जाएगा:
public class EpsilonDemo { public static String formatSize(long v) { if (vअपेक्षा:
कोड 80MB बाइट प्रकार की ऑब्जेक्ट आवंटित करता है। जब हम कोड निष्पादित करते हैं तो हमें प्रिंट स्टेटमेंट के साथ इसे देखने में सक्षम होना चाहिए।अब संकलित संस्करण को EpsilonGC के साथ/बिना चलाने के लिए:
- G1GC के साथ चल रहा है:
java -Xms100m -Xmx100m -XX: UseG1GC EpsilonDemo Starting allocations... *** Free MEM = 102.2 MB Completed successfully *** Free MEM = 74.2 MBइसलिए G1GC के साथ हमें 28 एमबी उपयोग की गलत आवंटन तस्वीर दिखाई देती है
- एप्सिलॉनजीसी के साथ चल रहा है:
java -Xms100m -Xmx100m -XX: UnlockExperimentalVMOptions -XX: UseEpsilonGC EpsilonDemo [0.004s][warning][gc,init] Consider enabling -XX: AlwaysPreTouch to avoid memory commit hiccups Starting allocations... *** Free MEM = 99.4 MB Completed successfully *** Free MEM = 18.7 MBयहां आप 80.7 एमबी उपयोग स्पष्ट रूप से देख सकते हैं
मुझे आशा है कि इससे आपको यह देखने में मदद मिलेगी कि एप्सिलॉनजीसी आपके कोड में मेमोरी उपयोग पैटर्न का पता लगाने के लिए कैसे बहुत उपयोगी हो सकता है। प्रोत्साहित करना! ?
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3