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

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

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条)

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配