對於一維數組和二維數組的內存使用情況對比與理論值不一樣


按照理論上講,二維數組的內存消耗應該比一維數組要大,但是根據實際程序運行情況來看,兩者是一樣的
代碼:
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 联系我们: