हम कुछ ओरेकल जेवीएम कचरा संग्रहण विकल्पों को ट्विक करने की कोशिश कर रहे हैं और एक डेवलपर ने यह सुनिश्चित करने के लिए -XX:PretenureSizeThreshold
का उपयोग करने का प्रयास किया है ताकि तुरंत टेनेर में बड़ी मात्रा में ऑब्जेक्ट लगाए जा सकें। मुझे पूरा यकीन है कि धारणा यह थी कि सरणी का आकार सभी वस्तुओं के कुल आकार के बराबर या उससे अधिक है।जावा ऑब्जेक्ट्स के सरणी कैसे कार्यरत हैं?
लेकिन जावा में, ऑब्जेक्ट्स के सरणी नहीं हैं केवल संदर्भ के सरणी? अर्थात। सरणी में प्रत्येक ऑब्जेक्ट, साथ ही साथ सरणी ऑब्जेक्ट, स्मृति में अलग है और कचरा कलेक्टर द्वारा अलग के रूप में माना जाता है? मुझे लगता है कि यदि लाखों प्रविष्टियां हैं तो सरणी ऑब्जेक्ट अभी भी काफी बड़ा हो सकता है, लेकिन यह ऑब्जेक्ट के कुल आकार के पास कहीं भी नहीं होना चाहिए, यदि यह प्रत्येक संदर्भ किसी संदर्भ से बड़ा है।
मुझे लगता है कि क्योंकि AFAIK, सी में भ्रम की स्थिति नहीं है:
- यह
struct
कि वास्तव मेंstruct
रों की दुकान करता है की एक सरणी के लिए संभव है। - पॉइंटर्स से
struct
एस की एक सरणी भी संभव है।
मुझे यकीन है कि जावा हमेशा प्राचीन प्रकार के सरणी के लिए उपयोग करता है और हमेशा 2 का उपयोग करता है। वस्तुओं के सरणी के लिए, जबकि सी किसी भी प्रकार के लिए उपयोग कर सकता है ...?
क्या होगा यदि मैं का उपयोग अक्सर append()
एस (जैसा कि हम हाथ में हैं) के साथ करते हैं? केवल सरणी कॉपी की गई है, और सरणी में ऑब्जेक्ट्स नहीं है? साथ ही, जब सरणी की प्रतिलिपि बनाई जाती है, भले ही पुरानी सरणी टेनेर में थी, तब भी नया ईडन में शुरू होता है, है ना?
आप मूल रूप से सही हैं। जावा में गैर-प्राइमेटिव्स की एक सरणी हमेशा संदर्भों की एक सरणी होती है।और यदि एक ऐरेलिस्ट को फिर से आवंटित किया जाता है तो नई सरणी "ताजा" शुरू होती है। (यह कहना नहीं है कि कुछ जेवीएम विशेष परिस्थितियों को विशेष परिस्थितियों में नहीं रखते हैं, लेकिन यह एक बहुत ही अलग होगा (यानी, बेंचमार्क महत्वपूर्ण) स्थिति पर लक्षित।) –