जेडीके तथाकथित प्रत्यक्ष बाइटबफर को आवंटित करने की क्षमता प्रदान करता है, जहां स्मृति को जावा ढेर के बाहर आवंटित किया जाता है। यह फायदेमंद हो सकता है क्योंकि इस स्मृति को कचरा कलेक्टर द्वारा छुआ नहीं जाता है, और इस तरह जीसी ओवरहेड में योगदान नहीं देता है: यह कैश जैसी लंबी जीवित चीजों के लिए संपत्ति के लिए बहुत उपयोगी है।देशी स्मृति की मुक्त करने के लिए मजबूर करने के उदाहरण सीधे बाइटबफर ने sun.misc.Unsafe का उपयोग करके आवंटित किया है?
हालांकि, मौजूदा कार्यान्वयन के साथ एक महत्वपूर्ण समस्या है: अंतर्निहित स्मृति केवल असीमित रूप से आवंटित की जाती है जब मालिक बाइटबफर कचरा इकट्ठा होता है; प्रारंभिक विलोपन को मजबूर करने का कोई तरीका नहीं है। यह समस्याग्रस्त हो सकता है क्योंकि जीसी चक्र स्वयं बाइटबफर को संभालने से प्रभावित नहीं है, और यह देखते हुए कि बाइटबफर पुराने ओल्ड जेनरेशन मेमोरी एरिया में रहने की संभावना है, यह संभव है कि बाइटबफर अब उपयोग में आने के कुछ घंटे बाद जीसी को बुलाया जा सके।
लेकिन सिद्धांत रूप में sun.misc.Unsafe
विधियों (फ्रीमेमरी, आवंटित स्मृति) का उपयोग करना संभव होना चाहिए: जेडीके स्वयं मूल स्मृति आवंटित/हटाने के लिए उपयोग करता है। कोड को देखते हुए, मुझे लगता है कि एक संभावित चिंता स्मृति की दोहरी मुक्त होने की संभावना है - इसलिए मैं यह सुनिश्चित करना चाहता हूं कि राज्य ठीक से साफ हो जाएगा।
क्या कोई मुझे कोड पर इंगित कर सकता है जो ऐसा करता है? आदर्श रूप से जेएनए के बजाय इसका उपयोग करना चाहते हैं।
नोट: मैंने this question देखा जो संबंधित है।
ऐसा लगता है कि उत्तर देने के लिए अच्छा तरीका है: here एलिस्टिक खोज से कोड उदाहरण है जो विचार का उपयोग करता है। धन्यवाद हर कोई!
यह संभव है, एसओ साल पहले पाया गया ... अब देख रहा है। (अतीत में मैंने केवल बफर के एक गोलाकार कतार का उपयोग किया, जो मेरे मामले में दबाव कम रहा।) –
वाह, मुझे अभी भी कोई अच्छा लेख नहीं मिल रहा है :( –
मुझे अभी तक System.gc देखना नहीं है() को कम से कम सूर्य पर नजरअंदाज किया जाना चाहिए, जो कि वैसे भी लक्ष्य है। – nilskp