JVM विकल्प -Xss - यह वास्तव में क्या करता है?


229

यह यहां कहता है कि -Xss का उपयोग "थ्रेड स्टैक आकार सेट करने के लिए" किया जाता है, इसका वास्तव में क्या मतलब है? किसी ने मुझे यह समझने में मदद कर सकता है?


यहाँ कुछ उदाहरण हैं (मेरा नहीं ...): herongyang.com/JVM/…
क्रिस्टोफ

जवाबों:


269

जावा एप्लिकेशन में प्रत्येक थ्रेड का अपना स्टैक होता है । स्टैक का उपयोग रिटर्न एड्रेस, फंक्शन / मेथड कॉल आर्गुमेंट्स आदि को होल्ड करने के लिए किया जाता है। इसलिए यदि कोई थ्रेड पुनरावर्ती एल्गोरिदम के माध्यम से बड़ी संरचनाओं को संसाधित करता है, तो उन सभी रिटर्न एड्रेस और ऐसे के लिए एक बड़े स्टैक की आवश्यकता हो सकती है। सूर्य JVM के साथ, आप उस पैरामीटर के माध्यम से उस आकार को सेट कर सकते हैं।


11
तो, -Xss विकल्प का उपयोग यह सीमित करने के लिए किया जाता है कि स्टैक कितनी मेमोरी का उपयोग करता है (रिटर्न एड्रेस, वेरिएबल्स आदि को संग्रहीत करके) और जो अप्रत्यक्ष रूप से यह भी सीमित करता है कि स्टैक कितना गहरा हो सकता है? क्या मैं सही हूँ?
संस्थान

5
@instantsetsuna: मुझे लगता है कि डिफ़ॉल्ट सीमा बढ़ाने के लिए अधिक सामान्य उपयोग संभव है । (हमेशा एक सीमा होती है।) लेकिन हां, आप स्टैक के आकार को नियंत्रित कर रहे हैं, जो यह नियंत्रित करता है कि स्टैक कितना गहरा हो सकता है।
टीजे क्राउडर

आप जावा कंपाइलर (उर्फ़ जेवैक) पर इस XSS सेटिंग के बराबर कैसे करते हैं? इसका उपयोग उन लोगों के लिए एक मुद्दा है, जो वर्गों के संकलन में होने वाली बड़ी पूंछ पुनरावृत्ति का कारण बनने वाले स्काला-आधारित पुस्तकालयों का उपयोग करते हैं - एंड्रयू नॉर्मन 9 सेकंड पहले
एंड्रयू नॉर्मन

@AndrewNorman: आप जावा रनटाइम विकल्पों को क्लास फाइल में संकलित नहीं करते हैं, यह एक पर्यावरण-विशिष्ट चीज है। यदि आपको वास्तव में इसे कोड में करने की आवश्यकता है, तो आप एक छोटे से मुख्य वर्ग को लिख सकते हैं जिसका एकमात्र काम आपके वास्तविक एप्लिकेशन को आपके द्वारा आवश्यक विकल्पों के साथ लॉन्च करना है।
टीजे क्राउडर

@AndrewNorman आप JVM विन्यास झंडे दे सकते हैं संकलक को -Jflagसिंटैक्स (जैसे। -J-Xss) का उपयोग करके चलाना चाहिए ।
फ्रेंकोइस्र

166

यह वास्तव में JVM पर स्टैक का आकार निर्धारित करता है।

आपको इन दोनों स्थितियों में इसे छूना चाहिए:

  • StackOverflowError (स्टैक आकार सीमा से अधिक है), मान बढ़ाएँ
  • OutOfMemoryError: नए देशी थ्रेड (बहुत सारे थ्रेड, प्रत्येक थ्रेड में एक बड़ा स्टैक) बनाने में असमर्थ , इसे घटाएं।

उत्तरार्द्ध आमतौर पर तब आता है जब आपका Xss बहुत बड़ा हो जाता है - फिर आपको इसे संतुलित करने की आवश्यकता होती है (परीक्षण!)


3
जरूरी नहीं कि हर बार वास्तव में हो। SOE और OOME दोनों अलग-अलग कारणों से हो सकते हैं जिन्हें अलग-अलग तरीके से तय किया जाना चाहिए।
दोपहर

4
यह सच है, लेकिन मैंने नहीं कहा -Xss SOE और OOME का एकमात्र कारण है, लेकिन दूसरा तरीका - यदि गलत तरीके से सेट किया गया है, तो यह दोनों में से एक का कारण बन सकता है।
एडम एडमज़ेक

5

प्रत्येक धागे में एक स्टैक होता है जो स्थानीय चर और आंतरिक मूल्यों के लिए उपयोग किया जाता है। स्टैक का आकार सीमित करता है कि आपकी कॉल कितनी गहरी हो सकती है। आम तौर पर यह कुछ ऐसा नहीं है जिसे आपको बदलने की आवश्यकता है।


4

अगर मैं गलत नहीं हूँ, तो यह वही है जो JVM को बताता है कि एक StackOverflowError जारी करने से पहले यह कितनी सफल कॉल स्वीकार करेगा। ऐसा कुछ नहीं जिसे आप आम तौर पर बदलना चाहते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.