Sto lavorando a un'app che gestisce molte allocazioni (dell'ordine di 4 milioni di doppi e un milione di classi). Stavo controllando i registri di Garbage Collector e ho visto che diverse quantità di memoria venivano liberate su dispositivi diversi.Android Garbage Collector Freed Memory
Ad esempio, ho un Moto X (2014) che finisce per liberare poco più di 312 MB. Ho anche un Droid Bionic che esegue lo stesso codice sugli stessi dati che libera in media 616 MB. Entrambi i dispositivi hanno una dimensione heap di circa 50 MB.
Perché è tanto più memoria liberata dal GC sul Bionic che dal Moto X? Dovrebbero generare la stessa quantità di spazzatura ciascuno. Cosa succede dietro le quinte del netturbino? Il Moto X è su Android 5.1 e Bionic è acceso 4.1.2.
Modifica: ho quattro dispositivi che liberano circa 300 MB di RAM: il Moto X (2014), il Nexus 7 2013, il Nexus 7 2012 e il Razr i. Tutti e quattro di questi usano ART. Il Bionic sta eseguendo il runtime Dalvik. È per questo che c'è meno liberazione? Ho notato che GC_FOR_ALLOC non si verifica in ART ma viene sempre chiamato su Dalvik.
Penso che la differenza sia dovuta alle architetture del processore utilizzate. MotoX utilizza Qualcomm Snapdragon S4 (set di istruzioni ARMv7), Bionix ha utilizzato un Cortex A-A53 più aggiornato (set di istruzioni ARMv8). –
@ShreyasChavan è la Moto X 2014 quindi ha uno Snapdragon 801 e il Bionic (dal 2011) ha un TI OMAP Cortex-A9 –
Le architetture del processore sono irrilevanti. L'heap di Dalvik e GC sono stati sviluppati attivamente fino alla metà del 2011, quando tutto è passato allo sviluppo dell'Arte. Probabilmente stai vedendo la differenza che anni di sviluppo possono fare. Conosco molto poco delle interiora dell'Arte, quindi non posso offrire approfondimenti specifici. Farò notare che osservare i messaggi di registro è un confronto tra mele e arance e che la mancanza di registrazione in stile Dalvik su un dispositivo Art non significa che non siano in corso azioni equivalenti. – fadden