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

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

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 cmd批处理参数如果含有双引号,该如何传入?
  • ¥15 fx2n系列plc的自控成型机模拟
  • ¥15 时间序列LSTM模型归回预测代码问题
  • ¥50 使用CUDA如何高效的做并行化处理,是否可以多个分段同时进行匹配计算处理?目前数据传输速度有些慢,如何提高速度,使用gdrcopy是否可行?请给出具体意见。
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),如何通过环岛的原理及完整代码
  • ¥20 机器学习或深度学习问题?困扰了我一个世纪,晚来天欲雪,能饮一杯无?
  • ¥15 c语言数据结构高铁订票系统
  • ¥15 关于wkernell.PDB加载的问题,如何解决?(语言-c#|开发工具-vscode)
  • ¥100 某宝多次访问被拒绝,求解
  • ¥15 (标签-STM32|关键词-智能小车)