先看如下两段代码
Double[] ds = new Double[10000000];
double[] ds = new double[10000000];
两段代码分别创建了两个1000万的数组,查看进程管理器Double的占用内存为40多M,而double的占用内存为80多M
分析: Double创建了一个1000万个空指针的数组,而每个指针占用4byte的内存,而每个double会占用8个byte的内存
经济算( 10000000 * 8) / 1024 /1024 = 76M左右 基本符合实际情况
但是如下代码却会占用260M左右的内存,不知道为什么
以我来看,40M的指针+80M的实际数据空间 = 120M 应该正好
备用URL
List<Double> d = new ArrayList<Double>();
for(int i = 0; i < 10000000; i++){
d.add((double)i);
}
http://www.javamex.com/tutorials/memory/object_memory_usage.shtml
看了这篇文章,知道,每个对象都会有一个8字节的housekeeping,而且如果对象字节大小不是8的倍数还会有填充,
按照这个计算,40M +2*80M大概占用200M内存。还是有所偏差,继续研究。