কেউ কি জাভাতে বুলিয়ান এর বিট আকার বলতে পারেন ?
উত্তর:
এটি ভার্চুয়াল মেশিন নির্ভর।
এটি ভার্চুয়াল মেশিনের উপর নির্ভর করে, তবে জাভাতে বাইট সম্পর্কে জিজ্ঞাসা করা অনুরূপ প্রশ্ন থেকে কোডটি মানিয়ে নেওয়া সহজ :
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();
}
}
পুনরাবৃত্তি করার জন্য, এটি ভিএম নির্ভর,
Size for LotsOfBooleans: 87978576
Average size: 87.978576
Size for LotsOfInts: 328000000
Average size: 328.0
এটি পরামর্শ দেয় যে বুলিয়ানগুলি মূলত সান এর জেভিএম প্রতিটি বাইটে প্যাক করতে পারে।
জাভাতে বুলিয়ান মান দ্বারা প্রতিনিধিত্ব করা আসল তথ্যটি একটি বিট: সত্যের জন্য 1, ভুজের জন্য 0। যাইহোক, মেমরিতে বুলিয়ান ভেরিয়েবলের আসল আকারটি জাভা নির্দিষ্টকরণের দ্বারা যথাযথভাবে সংজ্ঞায়িত করা হয়নি। জাভাতে প্রাথমিক তথ্য প্রকারগুলি দেখুন ।
বুলিয়ান ডেটা টাইপের কেবল দুটি সম্ভাব্য মান রয়েছে: সত্য এবং মিথ্যা। সত্যিকারের / মিথ্যা শর্তাদি অনুসরণ করে এমন সাধারণ পতাকাগুলির জন্য এই ডেটা প্রকারটি ব্যবহার করুন। এই ডেটা টাইপ এক বিট তথ্যের প্রতিনিধিত্ব করে তবে এর "আকার" এমন কিছু নয় যা যথাযথভাবে সংজ্ঞায়িত হয়।
পার্শ্ব নোটে ...
আপনি যদি বুলিয়ান অবজেক্টগুলির একটি অ্যারে ব্যবহার করার কথা ভাবছেন তবে তা করবেন না। পরিবর্তে একটি বিটসেট ব্যবহার করুন - এটির কিছু কার্যকারিতা অপ্টিমাইজেশন রয়েছে (এবং কয়েকটি দুর্দান্ত অতিরিক্ত পদ্ধতি যা আপনাকে পরবর্তী সেট / আনসেট বিট পেতে দেয়)।
আমি পড়লাম যে জাভা একটি boolean
ডেটাটাইপের জন্য একটি বাইট সংরক্ষণ করে তবে এটি কেবল একটি বিট ব্যবহার করে। তবে ডকুমেন্টেশন বলে যে "এর" আকার "এমন কিছু নয় যা যথাযথভাবে সংজ্ঞায়িত হয়" ।
এখানে দেখো.
boolean
মান সংকলিত int
জেভিএম ডাটা প্রকার। এখানে দেখুন ।
জাভাতে বুলিয়ানের আকার ভার্চুয়াল মেশিন নির্ভর। তবে জাভা অবজেক্টটি 8 বাইটের গ্রানুলারিটির সাথে সংযুক্ত রয়েছে। মোট 9 টি বাইটের তথ্যের জন্য একটি বুলিয়ানের 8 টি বাইটার শিরোনাম, এবং পেওলডের 1 বাইট রয়েছে। জেভিএম তারপরে এটি পরবর্তী 8 এর এককটি করে দেয় so সুতরাং java.lang.Boolean এর একটি উদাহরণ মেমরির 16 বাইট নেয়।
Boolean
যেমন একটি বর্জ্য হতে পারে ... এটি এমন আকারের long
যা একটি এর চেয়ে ট্রিলিয়ন গুণ বেশি তথ্য বহন করতে পারেBoolean