मैं बस इस विषय पर चलाए गए कुछ परीक्षण साझा करना चाहता था।
आकार की सरणी 10 लाख
public static void main(String[] args) {
memInfo();
double a[] = new double[10000000];
memInfo();
}
आउटपुट:
------------------------
max mem = 130.0 MB
total mem = 85.0 MB
free mem = 83.6 MB
used mem = 1.4 MB
------------------------
------------------------
max mem = 130.0 MB
total mem = 130.0 MB
free mem = 48.9 MB
used mem = 81.1 MB
------------------------
जैसा कि आप देख के रूप में इस्तेमाल ढेर आकार ~ 80 एमबी है, जो 10 मी * sizeof है बढ़ जाती है (डबल)।
लेकिन अगर हम डबल
public static void main(String[] args) {
memInfo();
Double a[] = new Double[10000000];
memInfo();
}
आउटपुट की डबल बजाय का उपयोग किया है 40MB दिखाएगा। हमारे पास केवल डबल संदर्भ हैं, वे प्रारंभ नहीं किए गए हैं।
डबल
public static void main(String[] args) {
memInfo();
Double a[] = new Double[10000000];
Double qq = 3.1d;
for (int i = 0; i < a.length; i++) {
a[i] = qq;
}
memInfo();
}
फिर भी 40MB के साथ इसे भरने। क्योंकि वे सभी एक ही डबल ऑब्जेक्ट को इंगित करते हैं।
डबल बजाय
public static void main(String[] args) {
memInfo();
Double a[] = new Double[10000000];
Double qq = 3.1d;
for (int i = 0; i < a.length; i++) {
a[i] = qq.doubleValue();
}
memInfo();
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
साथ आरंभ किया जा रहा लाइन
a[i] = qq.doubleValue();
a[i] = Double.valueOf(qq.doubleValue());
जो
a[i] = new Double(qq.doubleValue());
0 के बराबर है के बराबर है
चूंकि हम हर बार नई डबल ऑब्जेक्ट्स बनाते हैं, हम ढेर को उड़ाते हैं। यह दिखाता है कि डबल क्लास के अंदर मान ढेर में संग्रहीत हैं।
यह एक सरणी नहीं है। यह एक सरणी का संदर्भ है। संदर्भ स्वयं ही ढेर पर संग्रहीत किया जा सकता है यदि यह किसी वर्ग या ऑब्जेक्ट का सदस्य है, या स्टैक पर यदि यह किसी विधि में स्थानीय चर है। और यदि वे वर्ग या वस्तु के सदस्य हैं तो आदिम प्रकार ढेर पर संग्रहीत किए जा सकते हैं। – UncleO