Ehcache ऑन-हीप और ऑफ-हीप मेमोरी के बारे में बात करता है । अंतर क्या है? उन्हें कॉन्फ़िगर करने के लिए जेवीएम आर्ग का क्या उपयोग किया जाता है?
Ehcache ऑन-हीप और ऑफ-हीप मेमोरी के बारे में बात करता है । अंतर क्या है? उन्हें कॉन्फ़िगर करने के लिए जेवीएम आर्ग का क्या उपयोग किया जाता है?
जवाबों:
ऑन-हीप स्टोर उन वस्तुओं को संदर्भित करता है जो जावा हीप में मौजूद होंगे (और जीसी के अधीन भी)। दूसरी ओर, ऑफ-हाइप स्टोर संदर्भित (क्रमबद्ध) वस्तुओं को संदर्भित करता है जो EHCache द्वारा प्रबंधित किए जाते हैं, लेकिन ढेर के बाहर संग्रहीत होते हैं (और जीसी के अधीन भी नहीं)। चूंकि ऑफ-हीप स्टोर को मेमोरी में प्रबंधित किया जाना जारी है, यह ऑन-हीप स्टोर की तुलना में थोड़ा धीमा है, लेकिन डिस्क स्टोर की तुलना में अभी भी तेज है।
ऑफ-हीप स्टोर के प्रबंधन और उपयोग में शामिल आंतरिक विवरण प्रश्न में पोस्ट किए गए लिंक में बहुत स्पष्ट नहीं हैं, इसलिए टेराकोटा बिगमेरी के विवरण की जांच करना बुद्धिमान होगा , जिसका उपयोग ऑफ-डिस्क का प्रबंधन करने के लिए किया जाता है। दुकान। बिगमेमोरी (ऑफ-हीप स्टोर) का उपयोग जीसी के ओवरहेड से बचने के लिए किया जाना है जो कि कई मेगाबाइट या गीगाबाइट बड़े हैं। BigMemory JVM प्रक्रिया के मेमोरी एड्रेस स्पेस का उपयोग करता है, सीधे बाइटबर्फर्स के माध्यम से जो अन्य देशी जावा ऑब्जेक्ट्स के विपरीत जीसी के अधीन नहीं हैं।
से http://code.google.com/p/fast-serialization/wiki/QuickStartHeapOff
हीप-ऑफलोडिंग क्या है?
आमतौर पर आपके द्वारा आवंटित सभी गैर-अस्थायी वस्तुओं को जावा के कचरा संग्रहकर्ता द्वारा प्रबंधित किया जाता है। हालाँकि, VM कचरा संग्रहण का काम अच्छी तरह से करता है, एक निश्चित बिंदु पर VM को 'पूर्ण GC' नामक एक तथाकथित कार्य करना होता है। एक पूर्ण जीसी में पूर्ण आवंटित हीप को स्कैन करना शामिल है, जिसका अर्थ है कि जीसी पॉज़ / स्लोडाउन एक अनुप्रयोग हीप आकार के आनुपातिक हैं। इसलिए किसी भी व्यक्ति पर भरोसा न करें जो आपको बता रहा है कि 'मेमोरी सस्ता है।' जावा मेमोरी में खपत प्रदर्शन को नुकसान पहुंचाती है। इसके अतिरिक्त आप ढेर आकार> 1 जीबी का उपयोग करके उल्लेखनीय ठहराव प्राप्त कर सकते हैं। यह बुरा हो सकता है यदि आपके पास कोई निकट-वास्तविक समय चल रहा है, तो क्लस्टर या ग्रिड में एक जावा प्रक्रिया अनुत्तरदायी हो सकती है और क्लस्टर से हटा दी जा सकती है।
हालाँकि आज के सर्वर एप्लिकेशन (अक्सर ब्लोटी फ्रेमवर्क ;-) के शीर्ष पर बनाए गए) को आसानी से 4Gb से परे ढेर होने की आवश्यकता होती है।
इन मेमोरी आवश्यकताओं का एक समाधान, गैर-जावा ढेर (ओएस से सीधे आवंटित) के लिए वस्तुओं के कुछ हिस्सों को 'ऑफलोड' करना है। सौभाग्य से java.nio कक्षाओं को सीधे आवंटित / पढ़ने और स्मृति के अनवांटेड '' विखंडू (यहां तक कि मेमोरी फाइल) भी लिखता है।
तो कोई बड़ी मात्रा में 'अप्रबंधित' मेमोरी को आवंटित कर सकता है और इसका उपयोग वस्तुओं को बचाने के लिए कर सकता है। अनियंत्रित स्मृति में मनमानी वस्तुओं को बचाने के लिए, सबसे व्यवहार्य समाधान सीरियलाइज़ेशन का उपयोग है। इसका मतलब यह है कि एप्लिकेशन ऑफ़िशियल मेमोरी में ऑब्जेक्ट्स को क्रमबद्ध करता है, बाद में ऑब्जेक्ट को डीरिएरलाइज़ेशन का उपयोग करके पढ़ा जा सकता है।
जावा वीएम द्वारा प्रबंधित ढेर का आकार छोटा रखा जा सकता है, इसलिए जीसी पॉज़ मिल में हैं, हर कोई खुश है, काम किया है।
यह स्पष्ट है, कि इस तरह के ऑफ हीप बफर का प्रदर्शन ज्यादातर क्रमांकन कार्यान्वयन के प्रदर्शन पर निर्भर करता है। अच्छी खबर: किसी कारण के लिए एफएसटी-सीरियलाइजेशन बहुत तेज है :-)।
नमूना उपयोग परिदृश्य:
संपादित करें: कुछ परिदृश्यों के लिए कोई अधिक परिष्कृत कचरा संग्रह एल्गोरिदम चुन सकता है जैसे कि समवर्ती माकर्डवीप या जी 1 बड़े ढेर का समर्थन करने के लिए (लेकिन यह भी इसकी सीमा 16 जीबी ढेर से आगे है)। एक वाणिज्यिक जेवीएम भी है जिसमें सुधार के लिए 'पॉज़लेस' जीसी (अज़ुल) उपलब्ध है।
ढेर स्मृति में वह जगह है जहां आपकी गतिशील रूप से आवंटित वस्तुएं रहती हैं। यदि आपने उपयोग किया है new
तो यह ढेर पर है। यह स्टैक स्पेस के विपरीत है, जो कि फ़ंक्शन स्टैक रहता है। यदि आपके पास एक स्थानीय चर है तो वह संदर्भ स्टैक पर है। जावा का ढेर कचरा संग्रहण के अधीन है और ऑब्जेक्ट सीधे उपयोग करने योग्य हैं।
EHCache की ऑफ-हाइप स्टोरेज आपके रेग्युलर ऑब्जेक्ट को हीप से दूर ले जाती है, इसे सीरियल करती है, और इसे बाइट्स के रूप में स्टोर करती है जो कि EHCache मैनेज करती है। यह डिस्क पर संग्रहीत करने जैसा है लेकिन यह अभी भी रैम में है। इस राज्य में वस्तुएं सीधे उपयोग करने योग्य नहीं हैं, उन्हें पहले से निष्क्रिय करना होगा। कचरा संग्रहण के अधीन भी नहीं।
100% नहीं; हालाँकि, ऐसा लगता है कि हीप एक ऑब्जेक्ट या आवंटित स्थान का सेट है (RAM पर) जो कि कोड की कार्यक्षमता में या तो स्वयं जावा से बनाया गया है या ehcache से अधिक संभावित कार्यक्षमता है, और ऑफ़-हीप राम स्वयं की प्रणाली है कुंआ; हालाँकि, ऐसा लगता है कि यह एक परिमाण धीमा है क्योंकि यह व्यवस्थित नहीं है, जिसका अर्थ है कि यह एक ढेर का उपयोग नहीं कर सकता है (जिसका अर्थ है कि राम के अंतरिक्ष का एक लंबा सेट), और इसके बजाय अलग-अलग पते के रिक्त स्थान का उपयोग करके इसे थोड़ा कम कुशल बनाने की संभावना है।
फिर बेशक अगला टियर लोअर हार्ड-ड्राइव स्पेस ही है।
मैं ehcache का उपयोग नहीं करता, इसलिए हो सकता है कि आप मुझ पर भरोसा नहीं करना चाहते, लेकिन यही कि मैं उनके दस्तावेज से इकट्ठा हुआ हूं।