2010-12-02 4 views
7

से ओएस मेमोरी आकार प्राप्त करना जावा से ऑपरेटिंग सिस्टम पर कुल मेमोरी का आकार पाने का कोई तरीका है?जावा

Runtime.getRuntime().maxMemory() 

ऑपरेटिंग सिस्टम के नहीं, JVM के लिए अनुमत स्मृति देता है। क्या किसी को यह प्राप्त करने का कोई तरीका है (जावा कोड से)?

+0

आपको _know_ की क्या आवश्यकता है? –

+0

@ Thorbjørn: अगर मैं 2 जीबी रैम वाली मशीन पर चल रहा हूं लेकिन जेवीएम 1 जीबी तक सीमित है, तो मैं 2 जीबी आकार प्राप्त करना चाहता हूं, न कि नमूना कोड से 1 जीबी आकार लौटाया। या आप पूछ रहे हैं कि मुझे इसकी आवश्यकता क्यों है? –

+0

मैं पूछ रहा हूं कि आपको इसकी क्या आवश्यकता है _for_? –

उत्तर

13
com.sun.management.OperatingSystemMXBean bean = 
    (com.sun.management.OperatingSystemMXBean) 
    java.lang.management.ManagementFactory.getOperatingSystemMXBean(); 
long max = bean.getTotalPhysicalMemorySize(); 

रिटर्न JVM के लिए उपलब्ध रैम आकार (32 बिट द्वारा सीमित), नहीं ढेर आकार से जानकारी प्राप्त करने के लिए है।

+0

बढ़िया, जानना अच्छा लगा! (+1) –

+1

"एक्सेस प्रतिबंध: प्रकार 'ऑपरेटिंग सिस्टम सिस्टम' एपीआई नहीं है" जावा 8 में, विशेष रूप से 'com.sun.management' में से एक को संदर्भित करता है। –

2

उस जानकारी को प्राप्त करने के लिए कोई जावा -मात्र तरीका नहीं है। ओएस-विशिष्ट कमांड शुरू करने के लिए आप Runtime.exec() का उपयोग कर सकते हैं, उदा। लिनक्स पर /usr/bin/free। अभी भी लिनक्स सिस्टम पर, आप /proc/meminfo पार्स करने के लिए जावा फ़ाइल एक्सेस क्लासेस (FileInputStream) का उपयोग कर सकते हैं।

2

जो शुद्ध जावा के साथ संभव नहीं है, आपका प्रोग्राम जावा वर्चुअल मशीन पर चलता है, और इसलिए यह ओएस से अलग है।

1) आप एक JNI का उपयोग करें और एक सी ++ फ़ंक्शन को कॉल करें कि
2) एक अन्य विकल्प Runtime.exec() उपयोग करने के लिए है करने के लिए कर सकते हैं: मैं इस के लिए 2 समाधान सुझाव देते हैं। तो फिर तुम "cat /proc/meminfo"

+0

दूसरा विकल्प बेकार ढंग से काम करता है। धन्यवाद। –