Java中数组在内存中的存放原理?

Java中数组被实现为对象,它们通常都会由于记录长度而须要额外的内存。对于一个原始数据类型的数组,通常须要24字节的头信息再加上保存值所需的内存,其中24字节的头信息分别包含如下几个部分。html


下面分别分析一维、二维、三维的数组存储状况。数组

下面首先对一维数组进行分析,以int[]型数组为例,假设数组长度为N,那么须要的内存占用(24+4N)个字节,缘由分析比较简单,图解示例以下:即占用内存总量=头信息内存+数组N个int值占用内存。架构



对于二维数组进行分析,首先对于多维数组的概念,你们能够参考这篇博客:http://www.javashuo.com/article/p-epgezcdx-cd.htmlspa

多维数组实际存储的时候就是一维数组,高维数组不断的降维转化为低维数组,例如二维数组就是一个数组的数组,即每个一维数组里面包含一个另一个一维数组的引用。以一个MxN的double类型的二维数组为例,其实际占用内存总量为:(8MN+32M+24) 约等于8MN。这里仍然以图示进行讲解:(这里以64位架构的计算机为例,每一个对象引用地址为8位)htm


对于三维数组的分析,仍然以M x N x Q的double数组为例,与上面的分析过程相似,能够将三维数组转化成一个一维数组,该一维数组保存指向二维数组的引用。对于二维数组的分析过程则和上面的过程同样。对象

则占用的内存总共为:24 + 8M + M*(24 + 8N) + M*N(24 + 8Q)字节。blog

对于更高维的数据存储容量,能够按照类似的方法进行分析便可。内存