a'的大小;长';内存中-Java 检验过的

a'的大小;长';内存中-Java 检验过的,java,memory,heap-memory,visualvm,Java,Memory,Heap Memory,Visualvm,我仍在试图弄清楚为什么Java中的24字节总数。我无法知道图片中的4个字节是从哪里来的。内存填充是安迪的正确答案……)

我仍在试图弄清楚为什么Java中的
使用
12个字节,而不是内存中的
8个字节

确定某个地方存在错误的假设;请引导我。

我用两种方法进行了分析

  • 基于
  • 以下是我的逻辑/假设/来源信息

  • 在类中定义单个float或long属性并检查其内存占用
  • 对象将携带其自身的元数据值
    12字节=[4字节的类信息]+[4字节的标志信息]+[4字节的锁信息]
  • 类大小将是
    总内存-元数据
  • 收到的结果是
    12字节=>24字节(总内存)-12字节(元数据)
  • JDK:1.8.0_65;Java热点(TM)64位服务器虚拟机
  • 操作系统:Windows 8.1
  • [答案]4个字节的差异是由于JVM应用了填充。感谢安迪·特纳……

    引用:

    在现代64位JDK中,对象有一个12字节的头,填充为8字节的倍数


    额外的4个字节被填充为8的倍数。

    您可以检查double的大小:

    double numDouble=2;
    long size=(long)(numDouble*Double.SIZE) / Byte.SIZE;
    System.out.println(size);
    

    输出:16

    @AndyTurner,但在
    DoubleClass
    LongClass
    中有原语
    long
    double
    变量。@radoh
    DoubleClass
    LongClass
    有自己的元数据,值为12字节+8字节原语
    long
    double
    +4字节填充=>24字节总数。我无法知道图片中的4个字节是从哪里来的。内存填充是安迪的正确答案……)