对于一维数组和二维数组的内存使用情况对比与理论值不一样


按照理论上讲,二维数组的内存消耗应该比一维数组要大,但是根据实际程序运行情况来看,两者是一样的
代码:
int num1=1024*1024*2;
int[] arr1=new int[num1];
for(int i=0;i<arr1.length;i++)
{
arr1[i]=1;
}
//获取内存消耗
long memory1=Runtime.getRuntime().totalMemory()/1024/1024;
System.out.println(memory1);
int num2=1024*1024;
int[][] arr2=new int[num2][2];
for(int i=0;i<arr2.length;i++)
{
arr2[i][0]=1;
arr2[i][1]=1;
}
//获取内存使用
long memory2=Runtime.getRuntime().totalMemory()/1024/1024;
System.out.println(memory2);
 
考虑可能情况:
编译器/JDK版本升级之后对于处理逻辑产生变化,我现在用的Java 9

6 个解决方案

#1


这个问题有大神能解答一下么

#2


Runtime.getRuntime().totalMemory()这个方法返回的是当前虚拟机所占用的内存,并不等同于数组内存,就像你两次返回的大小都是一样,因为这个大小是虚拟机默认获取的内存大小

#3


楼上说的对,看名字就知道了

#4


#5


引用 2 楼 qq_36549701 的回复:
Runtime.getRuntime().totalMemory()这个方法返回的是当前虚拟机所占用的内存,并不等同于数组内存,就像你两次返回的大小都是一样,因为这个大小是虚拟机默认获取的内存大小

额,好吧,那如果想看其中一段代码运行后消耗的内存有没有什么办法呢

#6


这个不好做,因为虚拟机会在保证程序正常运行的前提下多获取一些内存,而且对象回收是不确定的,要想知道具体的对象大小,可以使用java.lang.instrument.Instrumentation.getObjectSize()方法递归计算引用大小。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: