2011-06-14 12 views
6

जावा थ्रेड को तत्काल और प्रारंभ होने पर कितनी मेमोरी (मोटे तौर पर) आवंटित की जाती है?जावा थ्रेड्स बनाते समय स्मृति उपयोग की मात्रा

यहाँ एक कोड नमूना है:

// Definition of the thread class 
class BasicThread extends Thread { 
    // This method is called when the thread runs 
    public void run() { 
    } 
} 
. 
. 
. 
// Create and start the thread 
Thread thread = new BasicThread(); 
thread.start(); 
+0

पर 32bit या 64 बिट वीएम निर्भर करता है। इस लेख को पढ़ें: http://www.javaspecialists.eu/archive/Issue029.html लेकिन आप क्यों पूछते हैं? क्या आप हजारों धागे शुरू करना चाहते हैं? –

+0

42 बाइट्स (बिल्कुल)। –

उत्तर

7

खैर धागा (उस वस्तु है) ही कुछ जगह की जरूरत है - यह लगभग एक दर्जन चर और वस्तुओं है (और मैं जिस तरह से भी गिनती करने के लिए आलसी हूँ उन्हें सही ढंग से) लेकिन यह 200byte से थोड़ा अधिक होना चाहिए (आपको मूल रूप से सभी प्राइमेटिव्स और संदर्भों को गिनना होगा [तुच्छ, उनके पास निश्चित आकार हैं - लेकिन संदर्भ आपके वीएम पर निर्भर करते हैं] और फिर आवंटित सभी ऑब्जेक्ट्स के आकार की गणना करें कक्षा द्वारा [हॉटस्पॉट वीएम में प्रति ऑब्जेक्ट 2 शब्दों का ओवरहेड होता है (3 यदि ऑब्जेक्ट में कोई स्थानीय चर नहीं है) और 8byte सीमा पर आवंटित किया जाता है])

वास्तव में अंतरिक्ष लेता है थ्रेड स्थानीय स्टैक होता है और यह -एक्सएसएस ध्वज से वीएम तक प्रभावित हो सकता है (हालांकि ध्यान दें कि प्रत्येक ओएस में अधिकतम स्टैकस्पेस की कुछ सीमाएं हैं, आप इसे लिनक्स में -ulimit के साथ प्रभावित कर सकते हैं और निश्चित रूप से किसी भी तरह खिड़कियों में भी)।

जावा SE 6 में, स्पार्क पर डिफ़ॉल्ट 64-बिट वी एम में 32-बिट वी एम में 512K, और 1024k है:

हॉटस्पॉट के लिए चूक इस प्रकार हैं। X86 सोलारिस/लिनक्स पर यह 32-बिट वीएम में 320k और में 64-बिट वीएम में 1024k है।

विंडोज़ पर, डिफ़ॉल्ट थ्रेड स्टैक आकार बाइनरी (java.exe) से पढ़ा जाता है। जावा एसई 6 के रूप में, यह 32-बिट वीएम में 320k और 64-बिट वीएम में 1024k है।

+0

धन्यवाद। यह बहुत उपयोगी था। –

0

आईआईआरसी, 32-बिट विंडोज प्रारंभिक थ्रेड स्टैक के लिए 'असली' भौतिक RAM का 64K रिजर्व करता है। हो सकता है कि कर्नेल गैर-पेजेड मेमोरी का एक और पेज आरक्षित कर सके, लेकिन मूल रूप से, केवल एकमात्र महत्वपूर्ण प्रारंभिक रिजर्व नए धागे के लिए ढेर है। यदि यह ढेर उड़ाया जाता है, तो वर्चुअल मेमोरी मैनेजर इसे एक्सई हेडर में पढ़ने वाली सीमा तक बढ़ा देता है और आमतौर पर लिंक समय पर सेट होता है। आईआईआरसी, इस सीमा को 1 एमबी से कम नहीं किया जा सकता है।

पता नहीं कैसे लिनक्स -32 व्यवहार करता है। संभवतः, कुछ हद तक समान रूप से।

Rgds, मार्टिन

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