a'的大小;长';内存中-Java 检验过的
我仍在试图弄清楚为什么Java中的a'的大小;长';内存中-Java 检验过的,java,memory,heap-memory,visualvm,Java,Memory,Heap Memory,Visualvm,我仍在试图弄清楚为什么Java中的24字节总数。我无法知道图片中的4个字节是从哪里来的。内存填充是安迪的正确答案……)
和
使用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
变量。@radohDoubleClass
和LongClass
有自己的元数据,值为12字节+8字节原语long
或double
+4字节填充=>24字节总数。我无法知道图片中的4个字节是从哪里来的。内存填充是安迪的正确答案……)