2011-01-27 5 views
21

Vorrei conoscere la quantità di spazio heap utilizzata dalla mia applicazione Android in due modi: - a livello di programmazione - tramite DDMS.Come rilevare l'utilizzo della dimensione heap di un'applicazione Android

Mi sono riferito al post this, prima di postare qui. In quel post, si dice che, Debug.getNativeHeapSize() restituisce l'heap. È questo il metodo esatto che dovrei usare, al fine di rilevare a livello di codice la dimensione dell'heap? In tal caso, dove devo registrarlo per ottenere l'uso corretto dell'heapsize della mia applicazione?

+3

In questo post http://stackoverflow.com/questions/2298208/how-to-discover-memory-usage-of-my-application-in-android Dianne fornisce un sacco di informazioni che possono aiutare. –

risposta

55

qui è quello che uso:

public static void logHeap() { 
     Double allocated = new Double(Debug.getNativeHeapAllocatedSize())/new Double((1048576)); 
     Double available = new Double(Debug.getNativeHeapSize())/1048576.0; 
     Double free = new Double(Debug.getNativeHeapFreeSize())/1048576.0; 
     DecimalFormat df = new DecimalFormat(); 
     df.setMaximumFractionDigits(2); 
     df.setMinimumFractionDigits(2); 

     Log.d("tag", "debug. ================================="); 
     Log.d("tag", "debug.heap native: allocated " + df.format(allocated) + "MB of " + df.format(available) + "MB (" + df.format(free) + "MB free)"); 
     Log.d("tag", "debug.memory: allocated: " + df.format(new Double(Runtime.getRuntime().totalMemory()/1048576)) + "MB of " + df.format(new Double(Runtime.getRuntime().maxMemory()/1048576))+ "MB (" + df.format(new Double(Runtime.getRuntime().freeMemory()/1048576)) +"MB free)"); 
    } 
+0

È davvero fantastico. –

+0

Grazie, grazie a te posso fare un metodo di gestione :) – delive

3

Sì. Si noti che ci sono anche la visualizzazione heap in DDMS ed è possibile utilizzare MAT Eclipse che è più che utile soprattutto in perdite di memoria di tracciamento BUT e questo è un enorme ma i numeri che vedi sono solo memoria di riferimento gestita dalla VM. Ci sono molti sottosistemi in Android che sono implementati sotto VM - native. La classe Bitmap di esempio più semplice. Non vedrai l'intera memoria allocata a una bitmap in DDMS e il garbage collector non è molto buono/veloce nel recuperare questa memoria. perciò stai attento.