क्या कोई भी जावा में बूलियन का थोड़ा आकार बता सकता है ?
जवाबों:
यह वर्चुअल मशीन पर निर्भर है।
boolean: The boolean data type... This data type represents one bit of information, but its "size" isn't something that's precisely defined
- लेकिन आपकी बात वैध है, यह कुछ लिंक और बेहतर जानकारी का उपयोग कर सकता है :)
यह वर्चुअल मशीन पर निर्भर करता है, लेकिन जावा में बाइट्स के बारे में पूछने वाले एक समान प्रश्न से कोड को अनुकूलित करना आसान है :
class LotsOfBooleans
{
boolean a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af;
boolean b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf;
boolean c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, cd, ce, cf;
boolean d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df;
boolean e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ea, eb, ec, ed, ee, ef;
}
class LotsOfInts
{
int a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af;
int b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf;
int c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, ca, cb, cc, cd, ce, cf;
int d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, da, db, dc, dd, de, df;
int e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ea, eb, ec, ed, ee, ef;
}
public class Test
{
private static final int SIZE = 1000000;
public static void main(String[] args) throws Exception
{
LotsOfBooleans[] first = new LotsOfBooleans[SIZE];
LotsOfInts[] second = new LotsOfInts[SIZE];
System.gc();
long startMem = getMemory();
for (int i=0; i < SIZE; i++)
{
first[i] = new LotsOfBooleans();
}
System.gc();
long endMem = getMemory();
System.out.println ("Size for LotsOfBooleans: " + (endMem-startMem));
System.out.println ("Average size: " + ((endMem-startMem) / ((double)SIZE)));
System.gc();
startMem = getMemory();
for (int i=0; i < SIZE; i++)
{
second[i] = new LotsOfInts();
}
System.gc();
endMem = getMemory();
System.out.println ("Size for LotsOfInts: " + (endMem-startMem));
System.out.println ("Average size: " + ((endMem-startMem) / ((double)SIZE)));
// Make sure nothing gets collected
long total = 0;
for (int i=0; i < SIZE; i++)
{
total += (first[i].a0 ? 1 : 0) + second[i].a0;
}
System.out.println(total);
}
private static long getMemory()
{
Runtime runtime = Runtime.getRuntime();
return runtime.totalMemory() - runtime.freeMemory();
}
}
दोहराने के लिए, यह वीएम-निर्भर है, लेकिन सन के JDK बिल्ड 1.6.0_11 पर चलने वाले मेरे विंडोज लैपटॉप पर मुझे निम्नलिखित परिणाम मिले:
Size for LotsOfBooleans: 87978576
Average size: 87.978576
Size for LotsOfInts: 328000000
Average size: 328.0
इससे पता चलता है कि बूलियन मूल रूप से सन जेवीएम द्वारा प्रत्येक बाइट में पैक किया जा सकता है।
जावा में बूलियन मान द्वारा दर्शाई गई वास्तविक जानकारी एक बिट: 1 सच के लिए, 0 झूठी के लिए है। हालाँकि, मेमोरी में बूलियन चर का वास्तविक आकार जावा विनिर्देश द्वारा ठीक से परिभाषित नहीं किया गया है। जावा में आदिम डेटा प्रकार देखें ।
बूलियन डेटा प्रकार के केवल दो संभावित मान हैं: सही और गलत। इस डेटा प्रकार का उपयोग साधारण झंडे के लिए करें जो सही / गलत स्थितियों को ट्रैक करते हैं। यह डेटा प्रकार एक बिट जानकारी का प्रतिनिधित्व करता है, लेकिन इसका "आकार" कुछ ऐसा नहीं है जिसे ठीक से परिभाषित किया गया हो।
एक और बात...
यदि आप बूलियन वस्तुओं की एक सरणी का उपयोग करने के बारे में सोच रहे हैं, तो नहीं। इसके बजाय एक BitSet का उपयोग करें - इसमें कुछ प्रदर्शन अनुकूलन (और कुछ अच्छे अतिरिक्त तरीके हैं, जिससे आप अगला सेट / परेशान) प्राप्त कर सकते हैं।
मैंने पढ़ा कि जावा एक boolean
डेटाटाइप के लिए एक बाइट रखता है , लेकिन यह केवल एक बिट का उपयोग करता है। हालाँकि, प्रलेखन का कहना है कि "इसका" आकार "कुछ ऐसा नहीं है जिसे ठीक से परिभाषित किया गया हो ।
" यहाँ देखें।
boolean
मूल्यों के लिए संकलित किया गया है int
JVM में डेटा प्रकार। देखें यहाँ ।
जावा में बूलियन का आकार वर्चुअल मशीन पर निर्भर है। लेकिन किसी भी जावा ऑब्जेक्ट को 8 बाइट्स ग्रैन्युलैरिटी से जोड़ा जाता है। जानकारी के कुल 9 बाइट्स के लिए एक बूलियन में हेडर के 8 बाइट्स, और पेलोड के 1 बाइट होते हैं। तब JVM इसे 8. की अगली बहु तक गोल कर देता है। इसलिए java.lang.Boolean का एक उदाहरण मेमोरी के 16 बाइट्स लेता है।
Boolean
ऐसी बर्बादी है ... जिसका आकार long
ट्रिलियन गुणा से अधिक जानकारी ले सकता हैBoolean
यह अपरिभाषित है; जॉन स्कीट जैसी चीजों को करने से आपको एक दिए गए प्लेटफ़ॉर्म पर एक अनुमान मिल जाएगा, लेकिन किसी विशिष्ट प्लेटफ़ॉर्म के लिए सटीक रूप से जानने का तरीका एक प्रोफाइलर का उपयोग करना है।