繁体   English   中英

内存中“长”的大小 - Java

[英]Size of a 'long' in memory - Java

已审核

  1. 内存中的字节大小 java
  2. byte-in-java-takes-4-bytes-by-default

我仍在试图弄清楚为什么 Java 中的longdouble在内存中消耗12 bytes而不是8 bytes

肯定在某处有错误的假设; 请指导我..

我用两种方法分析它,

  1. Java可视化虚拟机在此处输入图片说明
  2. 基于Java 检测内存测量器

以下是我的逻辑/假设/来源信息,

  1. 在类中定义单个 float 或 long 属性并检查其内存占用
  2. 对象将携带自己的12 bytes = [CLASS INFO OF 4 BYTES] + [FLAGS INFO OF 4 BYTES] + [LOCK INFO OF 4 BYTES]元数据12 bytes = [CLASS INFO OF 4 BYTES] + [FLAGS INFO OF 4 BYTES] + [LOCK INFO OF 4 BYTES]
  3. 类大小将是Total Memory - Meta Data
  4. 收到的结果是12 bytes => 24 bytes (Total Memory) - 12 bytes (Meta Data)
  5. JDK:1.8.0_65; Java HotSpot(TM) 64 位服务器虚拟机
  6. 操作系统:Windows 8.1
  7. 测试程序

[ ANSWER ] 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM