我通过引用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文件,它包含了什么。
答案 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)内存之间。