java中各种数据类型的内存

java中各种数据类型的内存,java,memory,Java,Memory,通过引用我正在编写的示例代码,我发现每个变量消耗了多少内存 我在这里试图理解一个简单java程序的内存占用。我对内存占用的理解是否正确。我还想知道每个类消耗多少。如果类B中没有任何字段,是否仍生成了一个B.class文件,以及它包含什么 值得记住的是,本地变量分配给寄存器,在64位机器上,这些寄存器是64位的,可能使用也可能不使用任何内存 每个对象都有一个8(32位)到12(64位)的头。此外,对象至少以8字节对齐方式填充。i、 e.每个B使用16个字节。对它的引用是4个字节 顺便说一句:在64

通过引用我正在编写的示例代码,我发现每个变量消耗了多少内存


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

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

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


顺便说一句:在64位JVM上,引用通常是32位的,通过使用压缩的OOP来寻址32 GB(最高可达Java 7)到64 GB(Java 8)的内存。

是否有前缀字节或类的字节?相关:在终端窗口中输入
man javap
,看看是否可以找到任何有用的选项。至于“B包含什么?”除了您创建的字段外,还有一个答案是默认构造函数。您需要它做什么?今天,计算机有这么多内存,有多少字节?例如,一个对象使用多少内存取决于实现。对于Windows上的Oracle JVM,上述情况可能都是正确的,但在其他操作系统或其他JVM实现上可能有所不同。@Jesper,而依赖于实现的情况适用于OpenJDK(参考实现)、Oracle、Azul和AFAIK IBM的JVM。例如Android DVM可能完全不同。@Jesper这表明32位DVM的头是8字节
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; 
}