2012-12-08 14 views
5

Possible Duplicate:
Is it possible to dynamically change maximum java heap size?क्या कोड में जावा हीप स्पेस को बढ़ाने का कोई तरीका है?

मैं जानता हूँ कि जावा निर्माता के लिए एक Xmx विकल्प नहीं है, लेकिन वहाँ है कि इस बजाय करता है (ताकि सभी कंप्यूटरों है कि मेरे कोड चलाने उनके ढेर होगा वृद्धि हुई) पूर्व प्रसंस्करण के निर्देश के कुछ प्रकार है।

जैसा कि अभी है, java.exe केवल ~ 280MB अधिकतम तक पहुंचता है (इससे पहले कि यह दुर्घटनाग्रस्त हो) - क्या यह सामान्य है?

+0

संबंधित: http://stackoverflow.com/questions/193483/how-to-specify-jvm-argument-for-maven-built-executable-jar –

+3

* "वहाँ जावा ढेर को बढ़ाने के लिए एक रास्ता है कोड में ही स्थान? "* नहीं - कोड लोड होने के बाद, उपलब्ध स्मृति पहले ही सेट हो चुकी है (पत्थर में)। एक समाधान वर्तमान वीएम में मेमोरी की जांच करना है, और यदि पर्याप्त नहीं है 1) अधिक मेमोरी के साथ एक नई 'प्रक्रिया' लॉन्च करें 2) बाहर निकलें। –

+0

@ एंड्रयू थॉम्पसन: "अधिक मेमोरी के साथ एक नई प्रक्रिया लॉन्च करें" क्या यह कोड में किया जा सकता है? –

उत्तर

1

"launch a new Process with more memory" can this be done in the code?

हां। यह सरल उदाहरण देखें।

import java.awt.EventQueue; 
import javax.swing.JOptionPane; 
import java.io.File; 

class BigMemory { 

    public static void main(String[] args) throws Exception { 
     if (args.length==0) { 
      ProcessBuilder pb = new ProcessBuilder(
       "java", 
       "-Xmx1024m", 
       "BigMemory", 
       "anArgument" 
       ); 
      pb.directory(new File(".")); 
      Process process = pb.start(); 
      process.waitFor(); 
      System.out.println("Exit value: " + process.exitValue()); 
     } else { 
      Runnable r = new Runnable() { 
       public void run() { 
        JOptionPane.showMessageDialog(
         null, 
         "Max Memory: " + 
         Runtime.getRuntime().maxMemory() + 
         " bytes."); 
       } 
      }; 
      EventQueue.invokeLater(r); 
     } 
    } 
} 
3

उत्तर "नहीं" है।

स्मृति आकार को प्रारंभ करने पर JVM को पास किया गया है। JVM के अंदर चल रहा कोड इसे बदल नहीं सकता है।

यदि आप इसके बारे में सोचते हैं, तो यह समझ में आता है, क्योंकि JVM एक ऐसा प्रोग्राम है जो जावा में लिखा नहीं गया है जो जावा बाइट कोड निष्पादित कर सकता है। जावा कोड को इसके कंटेनर को नियंत्रित करने की अनुमति देने के लिए सुरक्षित नहीं होगा।

+0

यदि मैं एक्सएमएक्स रूट जाना चाहता हूं, तो जावा निष्पादन योग्य को इस स्टार्टअप प्रॉपर्टी को जोड़ने की ज़रूरत है? ... मैंने अभी java.exe की खोज की है और मुझे लगभग दो दर्जन परिणाम मिलते हैं .. –

+0

या मुझे इसे दर्ज करना है cmd.exe में? –

+0

इसे एक कमांड लाइन विकल्प होना चाहिए। यह ऐसा कुछ नहीं है जिसे आप विश्व स्तर पर सेट कर सकते हैं। यह आमतौर पर एक समझदार मूल्य होता है जो इसे या तो सुझाव देता है) आपकी मशीन में अधिक स्मृति या अधिक संभावना नहीं है b) समस्या यह नहीं है कि आप क्या सोचते हैं क्योंकि आप "क्रैश" के बारे में बहुत विशिष्ट नहीं हैं। आईएमएचओ एक दुर्घटना का मतलब है कि आपके पास एक अनचाहे सिग्नल है और आपके पास एक डंप फ़ाइल लॉग होगी, त्रुटि या अपवाद नहीं। –

1

यदि आप इसे बढ़ा सकते हैं तो यह अधिकतम नहीं होगा।

इसका कारण बढ़ाना नहीं है क्योंकि यह स्टार्ट अप पर आवंटित किया गया है। यह केवल JVM प्रारंभ होने से पहले सेट हो सकता है।

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

नोट: यदि आप ढेर मेमोरी का उपयोग करते हैं, तो यह जीबी या यहां तक ​​कि टीबी अधिक हो सकता है क्योंकि यह अधिकतम का हिस्सा नहीं है।

As it is right now, java.exe reaches ~280MB max only (before it crashes) - is this normal?

क्रैश का मतलब कुछ भी हो सकता है और कारण कुछ भी हो सकता है। मेरा सुझाव है कि आप अधिक विस्तार से जांच करें कि यह क्यों काम नहीं कर रहा है और मुझे संदेह है कि आपको पता चलेगा कि अधिकतम मेमोरी समस्या नहीं है। (जब तक आपके पास एक छोटी सी जीबी मशीन नहीं है, तो इस मामले में डिफ़ॉल्ट अधिकतम मेमोरी लगभग 250 एमबी होगी)

+0

मुझे एक्सएमएक्स विशेषता कहां दर्ज करना है? मुझे JVM कमांड लाइन नहीं मिल रही है। आप शायद सही हैं कि अधिकतम ढेर आकार के अलावा कुछ और गलती है। –

+0

इसे केवल कमांड लाइन पर सेट किया जा सकता है। आप जावा प्रोग्राम कैसे चला रहे हैं? आपके पास कितनी मुख्य स्मृति है? –

+0

16 जीबी, जब मैं इसे cmd में दर्ज करता हूं।exe, मुझे जावा को आंतरिक या बाहरी कमांड –

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