2010-03-23 11 views
17

क्या BigDecimal द्वारा खपत की गई स्मृति की मात्रा का अनुमान लगाने के लिए कोई दिशानिर्देश है?जावा बिगडिमल स्मृति उपयोग?

String स्मृति उपयोग का आकलन करने के लिए इन guidelines के समान कुछ ढूंढ रहे हैं।

+0

एक बड़े स्थिर के साथ बहुत कुछ। बेशक, 'स्ट्रिंग' की तरह, यह कार्यान्वयन निर्भर है। –

+0

क्या आपने इसे पढ़ा था: http://www.javaworld.com/javaworld/javatips/jw-javatip130.html – PeterMmm

उत्तर

17

आप BigDecimal के लिए स्रोत में फ़ील्ड को देखें, तो वहाँ है:

BigDecimal: 
    long intCompact +8 bytes 
    int precision +4 bytes 
    int scale +4 bytes 
    String stringCache +? 
    BigInteger intVal +? 

BigInteger: 
    int bitCount +4 bytes 
    int bitLength +4 bytes 
    int firstNonzeroIntNum +4 bytes 
    int lowestSetBit +4 bytes 
    int signum +4 bytes 
    int[] mag +? 

stringCache के लिए टिप्पणी "प्रामाणिक स्ट्रिंग प्रतिनिधित्व स्टोर करने के लिए प्रयोग किया जाता है, यदि गणना की।" है, इसलिए यह सोचते हैं कि आप डॉन ' टी कॉल करने के लिए हम इसे शून्य बाइट्स के रूप में छोड़ देंगे, इसलिए कुल मिलाकर (8 + 4 + 4) = 16 बाइट्स + BigDteger BigDecimal में और बिगइंटर के लिए 4 + 4 + 4 + 4 + 4 = 20 बाइट्स + मैग हैं। तो कुल 36 बाइट्स और परिमाण। जहां तक ​​मैं परिमाण बता सकता हूं हमेशा पूर्ण पूर्णांक का प्रतिनिधित्व करने के लिए आवश्यक बिट्स की न्यूनतम संख्या होती है, इसलिए एक संख्या के लिए इसे लॉग 2 (एन) बिट्स की आवश्यकता होगी, जिसे इनट्स में परिवर्तित किया जा सकता है। तो सामान्य रूप में आप के बारे में उपयोग करना चाहिए:

36 + Ceiling(log2(n)/8.0) bytes 

(ध्यान दें कि यह तार करता, लेकिन यह आपको एक अच्छा सामान्य विचार देना चाहिए के लिए अपने उदाहरण कड़ी के रूप में अन्य वस्तु वर्णनकर्ता भूमि के ऊपर के किसी भी शामिल नहीं है।)

+0

ध्यान रखें कि 'stringCache' और 'intVal' में संदर्भ पॉइंटर्स होंगे (jvm impl निर्भर 4 या 8 बाइट्स)। न्यूनतम 12byte ऑब्जेक्ट हेडर ओवरहेड ('BigInteger' और 'BigDecimal', int []) और आखिरकार 8byte ऑब्जेक्ट आकार (राउंड अप) को याद रखें। –

+0

एस/सिलिंग/छत / – thisfred

3

यदि आप BigDecimal के आंतरिक में खोदते हैं तो आप देखेंगे कि यह < = Long.MAX_VALUE है, तो यह एक कॉम्पैक्ट प्रतिनिधित्व का उपयोग करता है। इसलिए, आपके द्वारा प्रतिनिधित्व किए जा रहे वास्तविक मूल्यों के आधार पर स्मृति उपयोग भिन्न हो सकता है।

+0

कॉम्पैक्ट प्रतिनिधित्व क्या है? –

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