在Java中只有一维数组,二维数组是一个存放了数组的数组
但是这里发现了一个比较有趣的现象:
先说结果:对于java二维数组建议 Int[][] arr=new Int[2][100] 而不要使用int[][] arr=new int[100][2]; 当然如果觉得内存无所谓的浪费就不说了
测试代码如下 :
@Test
//本测试结果为7M public void testArray(){ Runtime run = Runtime.getRuntime(); // 获取开始时内存使用量 long startMem = (run.totalMemory()-run.freeMemory())/1024; System.out.println("memory> total:" + run.totalMemory()/1024 + " free:" + run.freeMemory()/1024 + " used:" + startMem ); int[] arr=new int[2000000]; for(int i=0;i<2000000;i++){ arr[i]=i; } run = Runtime.getRuntime(); long endMem = (run.totalMemory()-run.freeMemory())/1024; System.out.println("memory> total:" + run.totalMemory()/1024 + " free:" + run.freeMemory()/1024 + " used:" + endMem ); System.out.println("memory difference:" + (endMem-startMem)/1024); } @Test
//本测试结果为7M public void testArrayOne(){ Runtime run = Runtime.getRuntime(); // 获取开始时内存使用量 long startMem = (run.totalMemory()-run.freeMemory())/1024; System.out.println("memory> total:" + run.totalMemory()/1024 + " free:" + run.freeMemory()/1024 + " used:" + startMem ); int[][] arr=new int[2][1000000]; for(int i=0;i<2;i++){ for(int j=0;j<1000000;j++){ arr[i][j]=j; } } run = Runtime.getRuntime(); long endMem = (run.totalMemory()-run.freeMemory())/1024; System.out.println("memory> total:" + run.totalMemory()/1024 + " free:" + run.freeMemory()/1024 + " used:" + endMem ); System.out.println("memory difference:" + (endMem-startMem)/1024); } @Test
//本测试结果为9M public void testArrayTwo(){ Runtime run = Runtime.getRuntime(); // 获取开始时内存使用量 long startMem = (run.totalMemory()-run.freeMemory())/1024; System.out.println("memory> total:" + run.totalMemory()/1024 + " free:" + run.freeMemory()/1024 + " used:" + startMem ); int[][] arr=new int[1000000][2]; for(int j=0;j<1000000;j++){ for(int i=0;i<2;i++){ arr[j][i]=i; } } run = Runtime.getRuntime(); long endMem = (run.totalMemory()-run.freeMemory())/1024; System.out.println("memory> total:" + run.totalMemory()/1024 + " free:" + run.freeMemory()/1024 + " used:" + endMem ); System.out.println("memory difference:" + (endMem-startMem)/1024); }
这里数据都使用比较大才方便比较,所以这里只是建议大家不要使用先大后小的数组声明方式