2017-05-02 12 views
11

मुझे एक व्यापक स्रोत नहीं मिला जो स्पष्ट रूप से अवधारणा को समझाएगा। मेरी समझ यह है कि एक थ्रेड को ईडन में स्मृति का कुछ हिस्सा दिया जाता है जहां यह नई वस्तुओं को आवंटित करता है। एक प्रतिस्पर्धी धागा ईडन के कुछ हद तक लगातार होने वाला होगा। क्या होता है यदि पहला धागा अपने टीएलबी में मुक्त क्षेत्र से बाहर हो जाता है? क्या यह ईडन के एक नए हिस्से का अनुरोध करेगा?एक TLAB (थ्रेड स्थानीय आवंटन बफर) क्या है?

+0

आपके अंतिम प्रश्न के बारे में, मुझे लगता है कि थ्रेड के लिए एक नया TLAB आवंटित किया जाता है। छोटे मेमोरी टुकड़ों की बजाय टीएलबी आवंटित करने के बारे में सोचें, जैसे कि सरल ऑप्टिमाइज़ेशन ताले की आवश्यकता के बजाय अक्सर काम थ्रेड स्थानीय बनाते हैं। – maaartinus

उत्तर

15

एक TLAB के विचार धागे के बीच तुल्यकालन की जरूरत को कम किया जा सके। टीएलबी का उपयोग करके, यह आवश्यकता कम हो जाती है क्योंकि किसी थ्रेड में ऐसा क्षेत्र होता है जिसका उपयोग यह कर सकता है और उम्मीद करता है कि यह इस क्षेत्र का उपयोग करने वाला एकमात्र धागा है। यह मानते हुए कि एक TLAB 100 ऑब्जेक्ट्स रख सकता है, एक थ्रेड को केवल 101 ऑब्जेक्ट आवंटित करते समय अधिक स्मृति का दावा करने के लिए लॉक प्राप्त करने की आवश्यकता होगी। टीएलबी के बिना, यह हर वस्तु के लिए आवश्यक होगा। नकारात्मकता निश्चित रूप से है कि आप संभावित रूप से अंतरिक्ष बर्बाद कर सकते हैं।

बड़े वस्तुओं आम तौर पर एक TLAB के बाहर आवंटित किए जाते हैं वे सिंक्रनाइज़ स्मृति आवंटन की आवृत्ति को कम करने का लाभ शून्य के रूप में। कुछ वस्तुएं एक टीएलबी के अंदर भी फिट नहीं हो सकती हैं।

आप -XX:TLABSize ध्वज का उपयोग कर एक TLAB का आकार सेट कर सकते हैं लेकिन आम तौर पर मैं आपको इन सेटिंग्स के साथ गड़बड़ करने की सलाह नहीं देता जबतक कि आपको वास्तव में कोई समस्या नहीं मिली है जिसे आप हल कर सकते हैं।

+0

धन्यवाद। 1) जब कोई धागा एक टीएलबी आवंटित करता है तो उसे अभी भी एक लॉक प्राप्त करना होता है ताकि एक प्रतिस्पर्धी धागा उसी क्षेत्र में एक TLAB आवंटित नहीं करेगा जो पहले धागे ने किया था। क्या यह धारणा सही है? 2) क्या TLAB के बाहर किसी ऑब्जेक्ट को आवंटित करना हमेशा महंगा होता है क्योंकि प्रत्येक नई ऑब्जेक्ट को आवंटित करने के लिए लॉक को अधिग्रहित किया जाना चाहिए जो TLAB में फिट नहीं है? धागा 1 एक TLABfrom का दावा करने का – user1745356

+1

Think 99 और धागा 2 के लिए 0 ऑफसेट से ऑफसेट 100 199 अनुबंध का कहना है कि एक बार बताया करने के लिए, धागा 2 0-99 में आवंटित नहीं कर सकता और धागा 1 100-199 में आवंटित नहीं कर सकता एक का दावा। कोई भी थ्रेड इस स्पेस को भविष्य के आवंटन बफर के रूप में दावा नहीं कर सकता है। इस तरह, प्रत्येक थ्रेड सिंक्रनाइज़ किए बिना 100 ऑब्जेक्ट्स आवंटित कर सकता है यदि प्रत्येक ऑब्जेक्ट काल्पनिक स्लॉट में से एक लेता है। एक टीएलबी के बाहर आवंटित करना बहुत महंगा नहीं है लेकिन यह स्पष्ट रूप से एक टीएलबी के भीतर से अधिक महंगा है क्योंकि इसे अन्य धागे के साथ संचार की आवश्यकता होती है जो एक साथ चल सकती है। –

+0

क्षमा करें, अगर मेरा प्रश्न स्पष्ट नहीं है, तो मैं इसे एक और तरीके से रखने की कोशिश करूंगा - यदि दो प्रतिस्पर्धी धागे अगले 100 वस्तुओं के लिए स्मृति आवंटित करना चाहते हैं और अगला उपलब्ध स्मृति पता 100 से शुरू हो रहा है तो पहला व्यक्ति जो प्राप्त करता है लॉक को 100 से 199 तक पते मिलेगा और दूसरा धागा 200 - 29 9 मिलेगा। क्या यह सही है? – user1745356

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