java - जावा एसई 6 से सूर्य के जेवीएम के लिए डिफ़ॉल्ट अधिकतम ढेर आकार क्या है?




jvm memory-management (4)

जावा एसई 6 (यानी सेटिंग -Xmx के बराबर) से सूर्य के जेवीएम के लिए डिफ़ॉल्ट अधिकतम ढेर आकार क्या है?

ऐसा लगता है कि जावा एसई 5 के लिए सर्वर-क्लास मशीन के साथ, it's

भौतिक स्मृति या 1 जीबी का 1/4 वां छोटा।

बोनस प्रश्न: ऐसा लगता है कि आईबीएम के जेवीएम के लिए आप इसे पूछ सकते हैं

java -verbose:sizes -version

क्या आप इसी तरह सूर्य के जेवीएम से पूछ सकते हैं?

संपादित करें :

मैंने Runtime.getRuntime () का उपयोग किया। अधिकतम स्मृति (भौतिक स्मृति / 4, 1 जी) की पुष्टि करने के लिए, अधिकतम दस्तावेज में संदर्भित।


JDK6U18 के अनुसार हीप आकार के लिए कॉन्फ़िगरेशन हैं।

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

डिफ़ॉल्ट अधिकतम ढेर आकार भौतिक स्मृति का आधा भौतिक स्मृति आकार तक 1 9 2 मेगाबाइट तक है और अन्यथा भौतिक स्मृति का एक चौथाई भौतिक स्मृति आकार तक 1 गीगाबाइट तक है। उदाहरण के लिए, यदि आपकी मशीन में 128 मेगाबाइट्स भौतिक मेमोरी है, तो अधिकतम ढेर आकार 64 मेगाबाइट्स है, और भौतिक मेमोरी के 1 गीगाबाइट से अधिक या उसके बराबर है, जिसके परिणामस्वरूप अधिकतम 257 मेगाबाइट का ढेर आकार होता है। अधिकतम ढेर आकार वास्तव में जेवीएम द्वारा उपयोग नहीं किया जाता है जब तक कि आपका प्रोग्राम पर्याप्त वस्तुओं को इसकी आवश्यकता न हो। प्रारंभिक ढेर आकार कहा जाता है, एक बहुत छोटी राशि, जेवीएम प्रारंभ के दौरान आवंटित किया जाता है। यह राशि कम से कम 8 मेगाबाइट्स और अन्यथा 1/64 भौतिक स्मृति तक 1 गीगाबाइट के भौतिक मेमोरी आकार तक है।

स्रोत: http://www.oracle.com/technetwork/java/javase/6u18-142093.html


इस सवाल का जवाब देने के लिए यह महत्वपूर्ण है कि जावा वीएम क्लाइंट या सर्वर मोड में है या नहीं। आप "-क्लिएंट" या "-सेवर" विकल्प निर्दिष्ट कर सकते हैं। अन्यथा जावा आंतरिक नियमों का उपयोग करता है; मूल रूप से Win32 हमेशा क्लाइंट होता है और लिनक्स हमेशा सर्वर होता है, लेकिन यहां तालिका देखें:

http://docs.oracle.com/javase/6/docs/technotes/guides/vm/server-class.html

सूर्य / ओरेकल jre6u18 डॉक्टर फिर से ग्राहक कहते हैं: यदि मशीन <= 1 9 2 एमबी है तो वीएम को 1/2 शारीरिक स्मृति मिलती है; मशीन के पास 1/4 मेमोरी है <= 1 जीबी; अधिकतम 256 एमबी। 2 जीबी भौतिक मेम के साथ 32 बिट विंडोजएक्सपी सिस्टम पर मेरे परीक्षण में, जावा ने 256 एमबी आवंटित किया, जो डॉक्टर के साथ सहमत है।

सन / ओरेकल jre6u18 दस्तावेज़ फिर से सर्वर कहता है: क्लाइंट के समान, फिर भ्रमित भाषा जोड़ता है: 32 बिट जेवीएम के लिए डिफ़ॉल्ट अधिकतम 1 जीबी है, और 64 बिट जेवीएम के लिए डिफ़ॉल्ट 32 जीबी है। 8 जीबी भौतिक के साथ 64 बिट लिनक्स मशीन पर मेरे परीक्षण में, जावा 2 जीबी आवंटित करता है, जो 1/4 भौतिक है; 128 जीबी भौतिक जावा के साथ 64 बिट लिनक्स मशीन पर 32 जीबी आवंटित, फिर से 1/4 भौतिक।

मुझे मार्गदर्शन करने के लिए इस एसओ पोस्ट के लिए धन्यवाद:

सर्वर-क्लास मशीन की परिभाषा हाल ही में बदल गई है?


कोई जावा कोड से पूछ सकता है:

long maxBytes = Runtime.getRuntime().maxMemory();
System.out.println("Max memory: " + maxBytes / 1024 / 1024 + "M");

javadoc देखें।


जावा 1.6.0_21 या बाद में, या तो ...

$ java -XX:+PrintFlagsFinal -version 2>&1 | grep MaxHeapSize
uintx MaxHeapSize                         := 12660904960      {product}

ऐसा लगता है कि न्यूनतम (1 जी) हटा दिया गया है।

या Findstr का उपयोग कर विंडोज पर

C:\>java -XX:+PrintFlagsFinal -version 2>&1 | findstr MaxHeapSize




memory-management