按照理論上講,二維數組的內存消耗應該比一維數組要大,但是根據實際程序運行情況來看,兩者是一樣的
代碼:
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 个解决方案
Runtime.getRuntime().totalMemory()這個方法返回的是當前虛擬機所占用的內存,並不等同於數組內存,就像你兩次返回的大小都是一樣,因為這個大小是虛擬機默認獲取的內存大小
這個不好做,因為虛擬機會在保證程序正常運行的前提下多獲取一些內存,而且對象回收是不確定的,要想知道具體的對象大小,可以使用java.lang.instrument.Instrumentation.getObjectSize()方法遞歸計算引用大小。