Zuweisung von zweidimensionalen arrays problem mit der Zuweisung zusätzlicher Speicher
war ich tracking-Zuweisungen in meine app und ich kam mit sehr merkwürdigen Verhalten bei der Zuweisung des array.
Das ist einfach die demo von meinem code -
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];
}
}
}
Ich zwei test Fälle, in denen ich einen Kommentar auf der Fall-Linien.
In Fall 1, wenn ich die Zuweisung eindimensionale Arrays scheint alles normal zu sein
- bevor Sie auf
- - heap-Größe = 5.2 MB
- reserviert = 2.6 MB
- nach dem Klick
- - heap-Größe = 6.5
- reserviert = 3.9
- zugewiesenen Objekte
- 56(Zuweisung) - kurz[] - Zuweisung im Main.java#OnClick
In Fall 2, wenn ich die Zuweisung zweidimensionales array strage Dinge geschehen
- bevor Sie auf
- - heap-Größe = 5.2 MB
- reserviert = 2.6 MB
- nach dem Klick
- - heap-size = 8.1 MB
- reserviert = 5.3 MB
- zugewiesenen Objekte
- 36(Zuweisungen) - kurz[] - Zuweisung im Array.java#createMultiArray
- 24(Zuweisungen) - short[][] - Zuweisung im Array.java#createMultiArray
- 24(Zuweisungen) - int[] - Zuweisung im Main.java#OnClick
Wenn man sich mal die Statistik werden Sie se, dass wenn ich mit 2 dim array der zugewiesenen Speicher ist etwa doppelt wenn ich mit 1 dim array. Es scheint, dass der zusätzliche Speicher geht für die Zuweisung int[].
Jemand hat die klare vision, warum dies passiert ist ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese:
ist die Schaffung von drei Objekten. Es ist effektiv:
Angesichts der overhead für jedes Objekt, ist es nicht verwunderlich, dass es über doppelt so viel Arbeitsspeicher. Sie würde sehen, weniger Unterschied zwischen diesem und (sagen)
aber das folgende wäre schrecklich, als würde es schaffen, 5000
short[]
arrays mit nur zwei Elementen, an welchem Punkt der Aufwand Zwerge die tatsächliche daa.