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

jack54877012 2017-10-26 10:01:32
按照理论上讲,二维数组的内存消耗应该比一维数组要大,但是根据实际程序运行情况来看,两者是一样的
代码:
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
...全文
401 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_36549701 2017-11-21
  • 打赏
  • 举报
回复
这个不好做,因为虚拟机会在保证程序正常运行的前提下多获取一些内存,而且对象回收是不确定的,要想知道具体的对象大小,可以使用java.lang.instrument.Instrumentation.getObjectSize()方法递归计算引用大小。
jack54877012 2017-11-20
  • 打赏
  • 举报
回复
引用 2 楼 qq_36549701 的回复:
Runtime.getRuntime().totalMemory()这个方法返回的是当前虚拟机所占用的内存,并不等同于数组内存,就像你两次返回的大小都是一样,因为这个大小是虚拟机默认获取的内存大小
额,好吧,那如果想看其中一段代码运行后消耗的内存有没有什么办法呢
李德胜1995 2017-11-20
  • 打赏
  • 举报
回复
繁华终归落尽 2017-11-20
  • 打赏
  • 举报
回复
楼上说的对,看名字就知道了
qq_36549701 2017-11-20
  • 打赏
  • 举报
回复
Runtime.getRuntime().totalMemory()这个方法返回的是当前虚拟机所占用的内存,并不等同于数组内存,就像你两次返回的大小都是一样,因为这个大小是虚拟机默认获取的内存大小
jack54877012 2017-11-20
  • 打赏
  • 举报
回复
这个问题有大神能解答一下么

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧