pan_cras
2016-11-01 02:59
采纳率: 100%
浏览 3.2k
已采纳

一维数组和二维数组存储占用内存是否相同

import java.util.Arrays;

public class OneArrayMemory {

public static void main(String[] args) {
    long startTime1 = System.currentTimeMillis(); // 获取开始时间

    int num1 = 1024 * 1024 * 2;
    int[] arr1 = new int[num1];

    Arrays.fill(arr1, 1);

    // for(int x : arr1){
    // System.out.println(x);
    // }

    // 获得占用内存总数,并将单位转换成MB
    long memory1 = Runtime.getRuntime().totalMemory() / 1024 / 1024;

    System.out.println("用一维数组存储占用内存总量为:" + memory1);


    long endTime1 = System.currentTimeMillis(); // 获取结束时间

    System.out.println("程序运行时间: " + (endTime1 - startTime1) + "ms");

    long startTime2 = System.currentTimeMillis(); // 获取开始时间


    int num2 = 1024 * 1024;

    int[][] arr2 = new int[num2][2];

    for (int[] i : arr2) {
        Arrays.fill(i, 1);
    }

    // for (int[] i : arr2) {
    // for (int j : i) {
    // System.out.print(j);
    // }
    // }

    // 获得占用内存总数,并将单位转换成MB
    long memory2 = Runtime.getRuntime().totalMemory() / 1024 / 1024;

    System.out.println("用二维数组存储占用内存总量为:" + memory2);


    long endTime2 = System.currentTimeMillis(); // 获取结束时间

    System.out.println("程序运行时间: " + (endTime2 - startTime2) + "ms");
}

}

感觉和我的想法有出入啊……

用一维数组存储占用内存总量为:123
程序运行时间: 6ms
用二维数组存储占用内存总量为:123
程序运行时间: 72ms

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • SeaTalks 2016-11-01 04:28
    已采纳

    首先,不管是一维数组还是二维数组都是数组类型(Array),而java中对于数组对象的头部中有三个域,分别是mark,klass和length(如想深入了解,可以看这里 ),其中length代表的是数组的长度,其后才是真正的所存的数据。而一维数组与二维数组最大的不同就是其数组中元素。一维数组中存的是数据本身,而二维数组中存的是指向另外一个一维数组的reference(事实就就是指针)。如果一维数组中元素的长度和引用类型长度相同的话,那一维数组与二维数组在相同元素条件下是内存占用量应该是相等的。如果一维数组元素的长度与引用类型长度不同,比如存的是char类型的数据,我认为就不相等了。你可以试一试。祝好!

    评论
    解决 无用
    打赏 举报
查看更多回答(6条)

相关推荐 更多相似问题