简体   繁体   English

内存中“长”的大小 - Java

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

Reviewed已审核

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

I am still trying to figure out why long and double in Java consuming 12 bytes instead of 8 bytes in memory我仍在试图弄清楚为什么 Java 中的longdouble在内存中消耗12 bytes而不是8 bytes

Sure there is wrong assumptions somewhere;肯定在某处有错误的假设; please guide me..请指导我..

I have analyzed it using two ways,我用两种方法分析它,

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

Following is my logic/assumption/source info,以下是我的逻辑/假设/来源信息,

  1. Define a single float or long property in a class and check its memory footprint在类中定义单个 float 或 long 属性并检查其内存占用
  2. Object will carry its own Meta Data worth 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]元数据12 bytes = [CLASS INFO OF 4 BYTES] + [FLAGS INFO OF 4 BYTES] + [LOCK INFO OF 4 BYTES]
  3. Class size will be Total Memory - Meta Data类大小将是Total Memory - Meta Data
  4. Result received is 12 bytes => 24 bytes (Total Memory) - 12 bytes (Meta Data)收到的结果是12 bytes => 24 bytes (Total Memory) - 12 bytes (Meta Data)
  5. JDK: 1.8.0_65; JDK:1.8.0_65; Java HotSpot(TM) 64-Bit Server VM Java HotSpot(TM) 64 位服务器虚拟机
  6. OS: Windows 8.1操作系统:Windows 8.1
  7. Test program 测试程序

[ ANSWER ] Difference of 4 bytes is owing to Padding Applied by JVM. [ ANSWER ] 4个字节的差异是由于JVM应用的填充。 Thanks Andy Turner...谢谢安迪·特纳...

Quoting this answer :引用这个答案

In a modern 64-bit JDK, an object has a 12-byte header, padded to a multiple of 8 bytes在现代 64 位 JDK 中,对象有一个 12 字节的标头,填充为 8 字节的倍数

The extra 4 bytes is padding to get to a multiple of 8.额外的 4 个字节被填充以获得 8 的倍数。

you can check the size of double:你可以检查double的大小:

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

output: 16输出:16

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

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