Moj*_*sin 0 java android memory-management multidimensional-array
我正在跟踪我的应用程序中的分配,并在分配数组时出现了非常奇怪的行为.这是我的代码的简单演示 -
public class Main extends Activity implements OnClickListener {
private Object[][] m = new Object[30000][];
@Override
public void onCreate(Bundle savedInstance) {
setContentView(R.layout.main);
super.onCreate(savedInstance);
findViewById(R.id.Button01).setOnClickListener(this);
}
@Override
public void onClick(View v) {
for (int i = 0 ; i < 30000 ; i++) {
// case 1
m[i] = new short[20];
// case 2
m[i] = new short[2][10];
}
}
}
Run Code Online (Sandbox Code Playgroud)
我运行了两个测试用例,其中我评论了案例行.在案例1中,当我分配一维数组时,一切似乎都是正常的
在案例2中,当我分配二维数组时,事情正在发生
如果你检查统计数据,你会发现,如果我使用的是2 dim数组,如果我使用的是1 dim数组,则分配的内存大约是两倍.似乎额外的内存用于分配int [].
有没有人清楚地知道为什么会这样?
这个:
new short[2][10]
Run Code Online (Sandbox Code Playgroud)
正在创建三个对象.这是有效的:
short[][] tmp = new short[2][];
tmp[0] = new short[10];
tmp[1] = new short[10];
Run Code Online (Sandbox Code Playgroud)
鉴于每个对象的开销,它占用大约两倍的内存并不奇怪.你会看到这和(比如说)之间的差异较小
// case 1
new short[10000]
// case 2
new short[2][5000]
Run Code Online (Sandbox Code Playgroud)
但是下面会是可怕的,因为它会创建5000个short[]只有两个元素的数组,此时开销使实际的daa相形见绌.
new short[5000][2]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6080 次 |
| 最近记录: |