2011-06-02 14 views
10

मैं यह गणना करने की कोशिश कर रहा हूं कि मेरे जावा प्रोग्राम में कितनी मेमोरी उपलब्ध है।जावा में उपलब्ध स्मृति की गणना करने का सबसे अच्छा तरीका क्या है?

long getAvailableMemory() { 
    Runtime runtime = Runtime.getRuntime(); 
    long totalMemory = runtime.totalMemory(); 
    long freeMemory = runtime.freeMemory(); 
    long maxMemory = runtime.maxMemory(); 
    long usedMemory = totalMemory - freeMemory; 
    long availableMemory = maxMemory - usedMemory; 
    return availableMemory; 
} 

यह सही है: मैं इस वर्तमान कार्यान्वयन है? क्या इस जानकारी की गणना करने का कोई आसान/अधिक सटीक तरीका है?

long getAvailableMemory() { 
    long totalVmHeap = Runtime.getRuntime().totalMemory(); 
    long freeVmHeap = Runtime.getRuntime().freeMemory(); 
    long usedVmHeap = totalVmHeap - freeVmHeap; 
    long maxVmHeap = Runtime.getRuntime().maxMemory(); 
    long availableVmHeap = maxVmHeap - usedVmHeap + freeVmHeap; 
    return availableVmHeap; 
} 

वैसे भी, क्या सही तरीके से इस जानकारी पर कदम उठाएं: किसी और कोड को देखने के बाद, मैं कुछ इस तरह जो थोड़ा अलग है देखा था?

+1

आपका समाधान मुझे सही दिखता है। – Adrian

+0

मैंने सोचा कि वे वही थे लेकिन अब मैं देखता हूं कि दूसरा वाला आपको केवल (अधिकतम - कुल) देता है। – trutheality

+1

मुझे लगता है कि आपको अपने प्रश्न का उत्तर एक उत्तर के रूप में रखना चाहिए, ताकि यह एक उत्तर प्रश्न के रूप में दायर किया जा सके। [क्या मुझे अपने प्रश्नों का उत्तर देना चाहिए] (http://meta.stackexchange.com/questions/12513/should-i-not-answer-my-own-questions) – Jarekczek

उत्तर

8

आप समाधान मेरे लिए सही लगती है (नीचे टिप्पणी की है कि तुम क्या की गणना कर रहे हैं समझाने के लिए):

long getAvailableMemory() { 
    Runtime runtime = Runtime.getRuntime(); 
    long totalMemory = runtime.totalMemory(); // current heap allocated to the VM process 
    long freeMemory = runtime.freeMemory(); // out of the current heap, how much is free 
    long maxMemory = runtime.maxMemory(); // Max heap VM can use e.g. Xmx setting 
    long usedMemory = totalMemory - freeMemory; // how much of the current heap the VM is using 
    long availableMemory = maxMemory - usedMemory; // available memory i.e. Maximum heap size minus the current amount used 
    return availableMemory; 
} 

मुझे यकीन है कि क्या आपके उपयोग के मामले है नहीं कर रहा हूँ लेकिन वहां भी ढेर के भीतर सीमा आप चाहते हो सकता है कर रहे हैं PermGen आकार की तरह देखने के लिए: How do I programmatically find out my PermGen space usage?

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

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