मुझे बताया गया था कि जब जेवीएम में एक संदर्भ बदल दिया गया है, जी 1 जीसी का उपयोग करके याद रखने के सेट को बदलने के लिए पूर्व लेखन बाधा डाली जाएगी, लेकिन कोड कहां है? मैं बाइट कोड कार्यान्वयन जैसे पुस्टेटिक की जांच करता हूं, लेकिन मुझे नहीं पता कि प्री बाधा कहां होती है? जी1 जीसी कहां और कैसे डोज में प्री राइट बैरियर डालें?

2
zhihaofeng 17 जिंदा 2020, 11:26

1 उत्तर

सबसे बढ़िया उत्तर

होल्गर की टिप्पणी से शायद पहले से ही स्पष्ट है, लेकिन यह बाइटकोड स्तर पर मौजूद नहीं होगा, लेकिन JIT द्वारा उत्पन्न होगा।

सबसे अच्छी व्याख्या स्रोत कोड में ही है, जो कुछ मामलों में उत्कृष्ट और कई बार बहुत स्पष्ट:

G1 को पुराने क्षेत्रों की निकासी को सक्षम करने के लिए विभिन्न क्षेत्रों के बीच वस्तु संदर्भों का ट्रैक रखने की भी आवश्यकता है, जो मिश्रित संग्रह के हिस्से के रूप में किया जाता है। संदर्भों को याद किए गए सेट में ट्रैक किया जाता है और लगातार अपडेट किया जाता है क्योंकि पोस्ट-बैरियर की सहायता से संदर्भ लिखे हैं।

याद किए गए सेट उदाहरण के लिए हैं, या उनका निर्माण कैसे किया जाता है।

और यहाँ post_barrier विधि है जिसका उपयोग C2 कंपाइलर करता है। हालांकि कुछ चीजें जो मैं उस स्रोत कोड से समझ सकता हूं, कुछ मेरे लिए बहुत जटिल हैं, जैसे, कोड को पढ़कर खुश :)

2
Eugene 17 जिंदा 2020, 21:16