Java开发之道
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

谬误17 相差甚远——存储相同数据一维数组、二维数组所占内存基本相同

很多程序员认为存储相同的数据,一维数组和二维数组所占用的内存空间基本相同,事实证明这种说法是完全错误的,这是因为二维数组所用的内存空间,要远远超过一维数组,为了证明存储相同数据,一维数组、二维数组所占内存基本相同的观点是错误的,接下来通过两个示例进行说明。

示例:

    public class OneArrayMemory {
      public static void main (String[] args) {
          int num = 1024*1024*2 ;           // 数组中元素的个数
          int[] arr = new int[num];         // 创建int型一维数组
          for (int i = 0; i < arr. length; i++) {
            arr[i] = i;                     // 为数组元素赋值
          }
          // 获得占用内存总数,并将单位转换为M
          long memory = Runtime.getRuntime(). totalMemory () / 1024 / 1024;
          System.out. println ("占用内存总量为:"+memory);
      }
    }

运行本示例,效果如图4.15所示。

图4.15 输出一维数组所占用的内存

示例:

    public class TwoArrayMemory {
      public static void main (String[] args) {
          int num = 1024 * 1024;                 // 数组中元素的个数
          int[][] arr = new int[num][2];         // 创建int型二维数组
          for (int i = 0; i < arr. length; i++){
            arr[i][0] = i;                       // 为数组元素赋值
            arr[i][1] = i;                       // 为数组元素赋值
          }
          // 获得占用内存总数,并将单位转换为M
          long memory = Runtime.getRuntime(). totalMemory () / 1024 / 1024;
          System.out. println ("占用内存总量为:"+memory);
      }
    }

运行本示例,效果如图4.16所示。

图4.16 输出二维数组所占用的内存

说明

在定义二维数组时,将数组第一维指定为1024×1024,第二维指定为2,目的是与一维数组的1024×1024×2相同,由于两个数组的元素数相同,所以从输出结果可以看出,存储相同的数据,二维数组比一维数组占用的内存空间要多好几倍。