2013-02-18 105 views
6

मैं एक निश्चित जावा प्रोग्राम चला रहा हूं, इसके एक्सएक्सएक्स -XMS से अधिक है, यानी इसका ढेर बढ़ सकता है। निष्पादन अंत में ढेर का आकार (आईआईआरसी) रन के दौरान अधिकतम उपयोग नहीं किया जाता है।जावा प्रोग्राम अपने रन के दौरान उपयोग किए जाने वाले अधिकतम वास्तविक ढेर आकार का ट्रैक कैसे रख सकता है?

  • मैं वर्तमान ढेर आकार कैसे प्राप्त कर सकता हूं?
  • मैं वर्तमान आकार "खुद" को समय-समय पर मतदान करने के अलावा, रन के दौरान अधिकतम ढेर आकार कैसे प्राप्त कर सकता हूं?

उत्तर

2

// बाइट में ढेर के वर्तमान आकार प्राप्त

long heapSize = Runtime.getRuntime().totalMemory(); 

// बाइट में ढेर का अधिकतम आकार प्राप्त करें। ढेर इस आकार से आगे नहीं बढ़ सकता है .// किसी भी प्रयास के परिणामस्वरूप आउटऑफमेमरी अपवाद होगा।

long heapMaxSize = Runtime.getRuntime().maxMemory(); 

// बाइट्स में ढेर के भीतर मुफ्त मेमोरी प्राप्त करें। यह आकार कचरा संग्रह के बाद // बढ़ाएगा और नई वस्तुओं के निर्माण के रूप में घट जाएगा।

long heapFreeSize = Runtime.getRuntime().freeMemory(); 
+0

क्या यह आपके लिए उपयोगी है। –

2

यदि आप अपने कार्यक्रम से ही निरीक्षण Runtime वर्ग के तरीकों का उपयोग करना चाहते हैं:

Runtime.getRuntime().freeMemory() 
Runtime.getRuntime().maxMemory() 

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

4

वर्तमान ढेर आकार प्राप्त करें:

public static long getHeapSize(){ 
    int mb = 1024*1024; 

    //Getting the runtime reference from system 
    Runtime runtime = Runtime.getRuntime(); 

    return ((runtime.totalMemory() - runtime.freeMemory())/mb); 
} 
1

क्रम जानकारी देखें:।

Runtime.getRuntime().maxMemory(); 
Runtime.getRuntime().totalMemory(); 
Runtime.getRuntime().freeMemory(); 
2

अन्य उत्तर Runtime.getRuntime() के माध्यम से करने का यांत्रिकी प्रदान totalMemory() और maxMemory(), लेकिन बहुत सावधान रहें - दिया गया उत्तर केवल एक दिए गए तत्काल पर सच होगा। जीसी के बाद, कुल मेमरी() बदल जाएगा (नीचे!)। आप हमेशा "सिस्टम में कितनी लाइव ऑब्जेक्ट्स हैं" का बिल्कुल सटीक दृश्य नहीं देख सकते हैं - जैसा कि जीसी की गणना करता है, और महंगा है।

जेएमएक्स (जीसी बीन, आदि देखें) का उपयोग उस मतदान के साथ मदद करेगा, लेकिन फिर, यह समय के साथ एक नमूना है।

इसलिए मुझे यकीन नहीं है कि आप वास्तव में क्या हल करने की कोशिश कर रहे हैं ...