2012-06-14 13 views
19

मैं एक साइट से निम्न का उल्लेख किया है: JVM हॉटस्पॉट स्मृति 3 स्मृति रिक्त स्थान के बीच विभाजित है:जावा स्टैक आवंटित कहां है?

  • जावा ढेर
  • PermGen (स्थायी पीढ़ी) अंतरिक्ष
  • मूल निवासी ढेर (सी हीप)

हॉटस्पॉट JVM में आवंटित स्टैक कहां है? देशी ढेर में?

अद्यतन: एक और संदर्भ की जानकारी: 64-बिट वी एम, सी ढेर क्षमता के लिए = शारीरिक सर्वर की कुल रैम & आभासी स्मृति - जावा ढेर - PermGen

+3

जहां भी कार्यान्वयन इसे आवंटित करता है ... –

+0

ध्यान रखें कि जावा कोड एक जेआईटी कंपाइलर के तहत चल रहा है, जो इसे भी बदल सकता है। –

+0

जेवीएम के कार्यान्वयन के आधार पर स्टैक को तीन मेमोरी रिक्त स्थानों में से किसी एक को आवंटित किया जा सकता है (यानी ओरेकल और ऐप्पल जावा के विभिन्न कार्यान्वयन विकसित करते हैं)। – Vulcan

उत्तर

25

जवाब है:

  1. यह कार्यान्वयन निर्भर है।

  2. कार्यान्वयन में मैंने देखा, थ्रेड स्टैक आवंटन मानक सी देशी थ्रेड लाइब्रेरी द्वारा संभाला गया था, और ऐसा लगता है कि लाइब्रेरी ओएस पर जा रहा था ताकि स्टैक के लिए मेमोरी सेगमेंट आवंटित किया जा सके। तो "उपर्युक्त में से कोई नहीं"।

  3. आप अपने मंच के लिए प्रासंगिक ओपनजेडीके स्रोत कोड में जाकर इसकी पुष्टि कर सकते हैं।

अद्यतन

एक पुराने सवाल से, यहाँ pthread_create से कोड का स्निपेट जिसे धागा ढेर के आवंटन का अनुरोध करता है। मूल विधि बनाने के लिए JVM थ्रेड कार्यान्वयन द्वारा का उपयोग किया गया था।

mmap(0, attr.__stacksize, 
    PROT_READ|PROT_WRITE|PROT_EXEC, 
    MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) 

आप देख सकते हैं, यह सिर्फ ऑपरेटिंग सिस्टम से एक स्मृति खंड का अनुरोध करने के mmap सिस्टम कॉल का उपयोग करता है। जैसा कि मैंने एक टिप्पणी में कहा था, यह नियमित जावा ढेर नहीं है, न कि पर्मजन ढेर, और सी देशी ढेर नहीं। यह विशेष रूप से ऑपरेटिंग सिस्टम से अनुरोध की गई स्मृति का एक खंड है।

संदर्भ के लिए, यहां mmap syscall manual entry का एक लिंक है।


अद्यतन: एक और संदर्भ की जानकारी: एक 64-बिट वी एम, सी ढेर क्षमता के लिए = शारीरिक सर्वर की कुल रैम & आभासी स्मृति - जावा ढेर - PermGen

IMO, कि है एक oversimplification। (और कृपया यह जानकारी प्रदान करें कि आपको यह जानकारी कहां मिली है ... ताकि हम इसे अपने मूल रूप में पढ़ सकें।)

+0

यदि हां। क्या मुझे लगता है कि जावा धागा देशी ढेर में आवंटित किया जाएगा? विशेष उपयोग के लिए जेवीएम ढेर और पर्मजेन दोनों जगहों का उपयोग किया जा रहा है। – jiafu

+1

आप इसके बारे में कुछ भी नहीं सोच सकते हैं, यह एक कार्यान्वयन विस्तार है। –

+0

मैं इस पर दिलचस्प हूँ। इसके कुछ भी नहीं यह कहाँ है? – jiafu

2

यदि आप किसी भी तरह से उन चीज़ों तक पहुंच पा सकते हैं, तो दूसरा सूर्य (या ओरेकल अब यह adays है?) जल्दी से एक पैच डाल देंगे।

उन चीजों तक पहुंचने में सक्षम होने के नाते एक बड़ा सुरक्षा जोखिम है। बड़ी कंपनियों के लिए बहुत सारी प्रणालियों ने जावा का इस्तेमाल किया। एक छेद छोड़ने के लिए जहां आवंटन स्थान को ट्रैक करना संभव है, संभव नहीं होगा।

उपर्युक्त के रूप में, एमएमएपी अंतरिक्ष आवंटित करेगा और इसे आवश्यक कार्यक्रम और अंतरिक्ष आवश्यकताओं के लिए वापस कर देगा। मैं लगभग हर दिन एमएमएपी के साथ बहुत सी चीजें करता हूं।

शायद क्योंकि मुझे लगता है कि चीजों का उपयोग कैसे किया जा सकता है (मेरे सिस्टम को बेहतर ढंग से सुरक्षित करने के लिए) में थोड़ा गहरा लगता है, सुनिश्चित करें कि आपके काम को रद्द करने के लिए एक गर्म फिक्स होगा, या आपके पास टीम अमेरिका वर्ल्ड पुलिस खटखटाई जा रही है आपके दरवाजे पर आपको ग़लत कृत्यों का संदेह है, और इस प्रक्रिया में आपके सभी उपकरणों को जब्त कर लिया गया है।

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