Java中double[]和Double[]内存占用分析

来源:互联网 发布:神经网络算法实例说明 编辑:程序博客网 时间:2024/06/18 03:58

背景

在编写java算法时将Map的value从double[]修改为Double[]发现内存增长了很多,因此对double[]和Double[]内存占用情况进行了分析。

Java对象内存布局

Java对象的内存布局包括:对象头(Header),实例数据(Instance Data)和补齐填充(Padding)。

  • 对象头

    对象头在32位系统上占用8bytes,64位系统上占用16bytes。

  • 实例数据
    原生类型所占内存

类型所占字节数byte1个字节boolean1个字节short2个字节char2个字节int4个字节float4个字节long8个字节double8个字节
  • 对齐填充
    Java对象占用空间是8字节对齐的,即所有Java对象占用bytes数必须是8的倍数。

数组对象内存占用分析

double数组内存分布

这里写图片描述

Double数组内存分布

这里写图片描述

总结

可见当数据量大时,Double[]所占内存为double[]的4.5倍,因此当数据量大时采用Double[]会导致数据量暴涨。
参考 Java中对象的内存使用学习