जवाब है:
यह कार्यान्वयन निर्भर है।
कार्यान्वयन में मैंने देखा, थ्रेड स्टैक आवंटन मानक सी देशी थ्रेड लाइब्रेरी द्वारा संभाला गया था, और ऐसा लगता है कि लाइब्रेरी ओएस पर जा रहा था ताकि स्टैक के लिए मेमोरी सेगमेंट आवंटित किया जा सके। तो "उपर्युक्त में से कोई नहीं"।
आप अपने मंच के लिए प्रासंगिक ओपनजेडीके स्रोत कोड में जाकर इसकी पुष्टि कर सकते हैं।
अद्यतन
एक पुराने सवाल से, यहाँ 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। (और कृपया यह जानकारी प्रदान करें कि आपको यह जानकारी कहां मिली है ... ताकि हम इसे अपने मूल रूप में पढ़ सकें।)
स्रोत
2012-06-14 01:22:37
जहां भी कार्यान्वयन इसे आवंटित करता है ... –
ध्यान रखें कि जावा कोड एक जेआईटी कंपाइलर के तहत चल रहा है, जो इसे भी बदल सकता है। –
जेवीएम के कार्यान्वयन के आधार पर स्टैक को तीन मेमोरी रिक्त स्थानों में से किसी एक को आवंटित किया जा सकता है (यानी ओरेकल और ऐप्पल जावा के विभिन्न कार्यान्वयन विकसित करते हैं)। – Vulcan