Java中布尔变量的大小是多少?

Java中布尔变量的大小是多少?,第1张

Java中布尔变量的大小是多少?

取决于虚拟机,但是很容易将代码从类似的问题改编成关于Java中字节的问题:

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();    }}

重申一下,这取决于VM,但是在运行Sun的

JDK build 1.6.0_11
的Windows笔记本电脑上,我得到以下结果:

Size for LotsOfBooleans: 87978576Average size: 87.978576Size for LotsOfInts: 328000000Average size: 328.0

这表明,Sun的JVM基本上可以将布尔值打包成一个字节。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5146178.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存