java中各种数据类型的内存

时间:2014-12-28 08:44:41

标签: java memory

我通过引用http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

找到每个变量在我编写的代码示例中消耗了多少内存
class A{
    public static void main(String[] args){
        int a;        // 4 bytes
        int b = 2;    // 4 bytes
        char c = 'a'; // 2 bytes
        B d;          // 8 bytes, reference to a 64bit memory takes up 8 bytes
        B e = new B();// 12 bytes, 8 bytes for reference + 4 bytes for int within it
    }
}

class B{
    int x; 
}

我试图了解一个简单的java程序的内存占用。我对内存占用的理解是否正确。另外我想知道每节课消耗多少。如果B类中没有任何字段,是否仍然生成了B.class文件,它包含了什么。

1 个答案:

答案 0 :(得分:1)

值得记住的是,本地变量被分配给寄存器,在64位机器上是64位,可能使用也可能不使用任何内存。

每个对象都有一个8(32位)到12(64位)的标头。此外,对象至少以8字节对齐方式填充。即每个B使用16个字节。对它的引用是4个字节。

BTW:64位JVM上的引用通常是32位,通过使用压缩的Oops来处理32 GB(最高Java 7)和64 GB(Java 8)内存之间。