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 ?

InformationsquelleAutor Mojo Risin | 2011-03-23
Schreibe einen Kommentar