2009-06-23 47 views
21

मेरे पास एक जावा ऐप है जो 16 जी के साथ मशीन पर लगभग 15 जी का उपयोग करता है। मुझे नहीं पता कि मुझे अधिकतम ढेर आकार निर्धारित करना चाहिए या नहीं।जावा ऐप जो बहुत सारी मेमोरी का उपयोग करता है। एक्सएक्सएक्स का प्रयोग करें?

यदि सेट जेवीएम सीमा तक सभी रैम खाएगा और तब कचरा इकट्ठा करना होगा और 15 जी ढेर वस्तुओं के माध्यम से सब कुछ बंद कर देगा?

यदि जेवीएम मशीन पर उपलब्ध सभी राम का उपयोग न करके प्रदर्शन को नुकसान पहुंचाएगा।

मेरा विशिष्ट वीएम है: जावा हॉटस्पॉट (टीएम) 64-बिट सर्वर वीएम (1.6.0_03-बी05, मिश्रित मोड बनाएं)।

धन्यवाद

+1

मैं -Xms2G -Xmx14G -XX: के साथ बस गया: + अब के लिए कॉनकमार्कस्वेपजीसी का उपयोग करें। –

उत्तर

18

-Xmx15G अधिकतम ढेर आकार को 15 गीगा सेट करेगा। जावा केवल वही आवंटित करेगा जो इसे चलाने के लिए आवश्यक है। यदि आप इसे सेट नहीं करते हैं, तो यह केवल डिफ़ॉल्ट का उपयोग करेगा। डिफ़ॉल्ट पर जानकारी के लिए, this post देखें।

-Xms15G न्यूनतम ढेर को 15 गीगा सेट करता है। यह जावा को निष्पादन शुरू करने से पहले 15 गीगा ढेर अंतरिक्ष आवंटित करने के लिए मजबूर करता है, चाहे उसे इसकी आवश्यकता हो या नहीं।

आमतौर पर आप उन्हें JVM को ट्यून करने के तरीके के आधार पर उचित मानों पर सेट कर सकते हैं।

+0

मैंने पाया है कि यदि आप न्यूनतम सेट करते हैं तो भी यह हमेशा उस स्मृति का उपयोग नहीं करेगा और न्यूनतम मारने से पहले मामूली जीसी प्रदर्शन करेगा। –

+0

@ पीटर जावा प्रक्रिया इसे आवंटित करेगी, लेकिन JVM वास्तव में इसका उपयोग नहीं कर सकता है। मुझे जीसी की ह्युरिस्टिक्स के बारे में पता नहीं है, लेकिन जब भी वस्तुओं को इकट्ठा करने के लिए यह चलाने के लिए स्वतंत्र है। गौर करें कि एक्सएमएस == एक्सएमएक्स, मुझे उम्मीद है कि ढेर का उपयोग कभी भी एक्सएमएस से पूरा नहीं होगा। एक्सएमएस ओएस से जावा 'मॉलॉक्स' कितना है, JVM में चल रहे एप्लिकेशन को ढेर का उपयोग करने के तरीके से कोई लेना देना नहीं है। – Cogsy

+0

यदि आप स्ट्रिंग्स का उपयोग कर रहे हैं तो जोड़ने के लिए एक और चीज है-XX: + UseConMarkSweepGC वास्तव में पर्याप्त संसाधन उपलब्ध होने पर बहु-कोर मशीन पर संग्रह को गति में मदद करेगा। इसके अलावा, तार वास्तव में स्मृति को खा सकते हैं क्योंकि उन्हें पुरानी पीढ़ी को जल्द से जल्द बढ़ावा दिया जा सकता है। –

0

आप (-Xmx के साथ) एक अधिकतम ढेर आकार निर्धारित नहीं करते हैं, डिफ़ॉल्ट अधिकतम केवल 64MB नहीं है?

तो क्या आपका आवेदन OutOfMemoryError एस के साथ विफल नहीं होगा यदि आप इसे सेट नहीं करते हैं? मैं इस सवाल पर उलझन में हूँ। इस स्विच के बिना आपका एप्लिकेशन कैसे चला सकता है?

+0

मैं -Xmx 15G के साथ चल रहा हूं और यह ठीक चलाता है। मैं बस सोच रहा था कि क्या jvm को दिखाकर प्रदर्शन प्रदर्शन हुआ है जिसमें 15 जी खेलने के लिए है। क्या यह खुशी से 15 जी भर जाएगा और फिर इसके माध्यम से हमेशा के लिए मंथन ले जाएगा। इसके अलावा मुझे यकीन नहीं है कि ऐप कितना मेम उपयोग करता है क्योंकि यह 15 जी तक बढ़ रहा है जब मेरे पास -Xmx 15G है। –

+0

क्या आप वाकई 15 जीबी के ढेर आकार की आवश्यकता है, और यह कि यह सिर्फ एक पागल भाग्य स्मृति रिसाव नहीं है? –

+0

जवाब देने के लिए धन्यवाद। यह वास्तव में एक स्मृति मुद्दा नहीं है जिसके बारे में मैं सोच रहा हूं, यह एक प्रदर्शन मुद्दा है। मुझे आउटऑफमेमरी एरर नहीं मिल रहा है। मैं यह पता लगाने की कोशिश कर रहा हूं कि मुझे सर्वोत्तम स्मृति रणनीति खोजने के लिए इसे जेवीएम में छोड़ देना चाहिए या मुझे इसे थोड़ा सा मदद करना चाहिए। –

12

जावा 6 में, डिफ़ॉल्ट अधिकतम ढेर आकार वर्तमान में सिस्टम मेमोरी की मात्रा द्वारा निर्धारित किया जाता है।

Garbage Collector Ergonomics पृष्ठ के अनुसार, अधिकतम ढेर आकार है:

शारीरिक स्मृति या 1GB के 1/4 के छोटे। जे 2 एसई 5.0 से पहले, डिफ़ॉल्ट अधिकतम ढेर आकार 64 एमबी था।

-Xmx स्विच का उपयोग करके अधिकतम ढेर आकार को बदलने के लिए स्विच का उपयोग किया जा सकता है। उपयोग विवरण के लिए java - the Java application launcher दस्तावेज़ीकरण देखें।

+2

ध्यान दें कि उपर्युक्त केवल "सर्वर-श्रेणी" मशीनों के लिए सच है। जावा एसई 6 के लिए यह कम से कम 2 सीपीयू और कम से कम 2 जीबी भौतिक मेमोरी वाली मशीन है (http://download.oracle.com/javase/6/docs/technotes/guides/vm/server-class.html के अनुसार) –

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