Java中double[]和Double[]内存占用分析
背景
在编写java算法时将Map的value从double[]修改为Double[]发现内存增长了很多,因此对double[]和Double[]内存占用情况进行了分析。
Java对象内存布局
Java对象的内存布局包括:对象头(Header),实例数据(Instance Data)和补齐填充(Padding)。
-
对象头
对象头在32位系统上占用8bytes,64位系统上占用16bytes。
实例数据
原生类型所占内存
类型 | 所占字节数 |
---|---|
byte | 1个字节 |
boolean | 1个字节 |
short | 2个字节 |
char | 2个字节 |
int | 4个字节 |
float | 4个字节 |
long | 8个字节 |
double | 8个字节 |
- 对齐填充
Java对象占用空间是8字节对齐的,即所有Java对象占用bytes数必须是8的倍数。
数组对象内存占用分析
double数组内存分布
Double数组内存分布
总结
可见当数据量大时,Double[]所占内存为double[]的4.5倍,因此当数据量大时采用Double[]会导致数据量暴涨。
参考 Java中对象的内存使用学习