2009-06-19 5 views
33

मैं एक जावा जार फ़ाइल लॉन्च कर रहा हूं जिसे अक्सर डिफ़ॉल्ट 64 एमबी अधिकतम ढेर आकार से अधिक की आवश्यकता होती है। हालांकि इस ऐप के लिए 256 एमबी ढेर का आकार पर्याप्त है। जार लॉन्च करते समय हमेशा 256 एमबी अधिकतम ढेर आकार का उपयोग करने के लिए निर्दिष्ट करने के लिए क्या है (मैनिफेस्ट में?)? (अधिक विशिष्ट विवरण नीचे, यदि आवश्यक हो तो।)क्या मैं एक जार फ़ाइल से चलाने के लिए जावा अधिकतम ढेर आकार सेट कर सकता हूं?


यह है कि मैं जावा, जो कुछ छवि हेरफेर करता है में लिखा है एक कमांड लाइन अनुप्रयोग है। उच्च-रेज छवियों पर (लगभग 12 मेगापिक्सेल और ऊपर, जो असामान्य नहीं है) मुझे आउटऑफमेमरी एरर मिलता है।

वर्तमान में मैं यानी एक जार फ़ाइल से एप्लिकेशन को लॉन्च कर रहा हूँ, यानी

java -jar MyApp.jar params...

मैं कमांड लाइन पर 256MB अधिकतम ढेर आकार निर्दिष्ट करने के द्वारा एक OutOfMemoryError से बच सकते हैं,:

java -Xmx256m -jar MyApp.jar params...

हालांकि, मैं इसे निर्दिष्ट नहीं करना चाहता, क्योंकि मुझे पता है कि 256 एमबी उच्च-रेज छवियों के लिए भी पर्याप्त है। मैं उस जानकारी को जार फ़ाइल में सहेजना चाहता हूं। क्या यह संभव है?

+1

संक्षिप्त उत्तर नहीं है, आप JAR के लिए JVM तर्क निर्दिष्ट नहीं कर सकते हैं। संबंधित प्रश्न देखें http://stackoverflow.com/questions/193483 –

उत्तर

12

आप launch4j जैसे रैपर का भी उपयोग कर सकते हैं जो अधिकांश ओएस के लिए निष्पादन योग्य बना देगा: es और आपको वीएम विकल्प निर्दिष्ट करने की अनुमति देता है।

+0

मुझे यह पसंद है, और यह कमांड लाइन के "जावा -jar" भाग से भी छुटकारा पायेगा। – Kip

+0

वास्तव में, यह काफी अच्छा नहीं है जैसा मैंने सोचा था। मेरे पास मैक नहीं है, लेकिन मैं अपनी विंडोज मशीन से मेरी जार फ़ाइल के लिए एक मैक निष्पादन योग्य रैपर बनाना चाहता हूं। ऐसा लगता है कि यह ऐप काफी कुछ नहीं करता है ... – Kip

+0

मैं अपने मैक ऐप्स – willcodejavaforfood

3

Google पर an answer मिला।

वह JAR फ़ाइल के लिए कोई कहता है, हाँ JavaWeb प्रारंभ में, और कहा कि आप इसे अपने (संभवतः प्रणाली विशेष) लांचर/आवरण स्क्रिप्ट/app में क्या करना चाहिए।

3

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

2

हाँ! आपको एक छोटा स्टार्टर प्रोग्राम लिखने की जरूरत है - मैंने इसे करने के लिए एक छोटे से अधिक क्रॉस प्लेटफॉर्म संगत (पथ ठीक होना चाहिए) प्रोग्राम लिखा - नीचे देखें। यह विंडोज/Ubuntu/मैक ओएस एक्स पर परीक्षण किया गया है

Silent Development Blog article on increasing executable Java jar heap

4

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

आप कर सकते हैं एक और जार फ़ाइल में आपका मुख्य जार से चलाता होने से:

+0

धन्यवाद करने के लिए मैक की आवश्यकता हो सकती है, यह एक अच्छा विचार है। मुझे इसे देखना होगा! – Kip

0

वहाँ यह कर के कई तरीके हैं।

या, एक बैच फ़ाइल है जो आपके जार शुरू करेगी।लेकिन, सावधान रहना है, तो शुद्ध कहना से डाउनलोड, उपयोगकर्ता runnable

एक इंस्टॉलर का निर्माण होने के लिए स्क्रिप्ट के लिए अनुमति सेट करना होगा। मैक पर, जावा 7 के लिए ओरेकल जावा ऐप बंडलर का उपयोग करके, जावा 6 के लिए ऐप्पल ऐप बंडलर .app फ़ाइल का निर्माण करता है। आप अभी भी इसे फिर से वितरित नहीं कर सकते क्योंकि आवश्यक अनुमतियां सेट नहीं की जाएंगी। ऐप फ़ाइल के लिए एक डीएमजी बनाएँ। इसका वितरण के लिए उपयोग किया जा सकता है। विंडोज

तीसरे तकनीक के लिए इसी तरह की एक संस्थापक, सबसे अच्छा होगा के रूप में आप तो निर्भरता अच्छी तरह से पैकेज कर सकते हैं, सेट सब JVM तर्क आदि

1

जाहिर है इस उबंटू

> export _JAVA_OPTIONS="-Xmx1g" 

जावा पर काम करता है जार jconsole.jar & अप चुना गया _JAVA_OPTIONS: -Xmx1g

+0

या JAVA_TOOL_OPTIONS = "- Xmx1g" –

15

एक बैच लिखें या वह निम्नलिखित पंक्ति युक्त लिपि स्क्रिप्ट होगा। फ़ोल्डर में रखो, जहां MyApp.jar संग्रहीत है।

java -Xmx256M -jar MyApp.jar 

जेएआर फ़ाइल लॉन्च करने के लिए हमेशा इस बैच/स्क्रिप्ट फ़ाइल को खोलने के बाद। हालांकि, यह वर्चुअल मेमोरी आकार के विनिर्देश को जार फ़ाइल में एम्बेड नहीं करेगा। लेकिन, यह कमांड लाइन पर अक्सर एक ही कमांड लिखने के लिए समस्या को ओवरराइड कर सकता है।

+1

वास्तव में यह प्रश्न का उत्तर देता है। हालांकि, चार साल बहुत देर हो चुकी है। – brezanac

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