Java - hogyan találjuk meg a memória használat az én alkalmazás android memória kód q - egy orosz (ru)

Felhívjuk figyelmét, hogy a memória használatára a modern operációs rendszerek, mint a Linux, egy rendkívül bonyolult és nehéz, hogy törölje a területen. Sőt, valószínű, hogy valóban helyesen értelmezni bármilyen számot, amit kap nagyon alacsony. (Szinte minden alkalommal, amikor ránézek a memóriahasználat számokat más mérnökök, mindig van egy hosszú beszélgetés arról, hogy mit jelent valójában, hogy csak vezet homályos következtetéseket.)

Megjegyzés. Most van egy sokkal kiterjedtebb memória kezelése dokumentációt az alkalmazás, amely magában foglalja a legtöbb anyag itt és modernebb az állam az Android.

Először is, talán olvasd el az utolsó része a cikket, ami bemutatja, hogyan kell kezelni a memória Android:

Található az alsó szinten, akkor az API Debug való kezdeti információt a szint memória a kernel: android.os.Debug.MemoryInfo

Megjegyezzük, hogy kiindulási 2.0-ás verzió, van API, ActivityManager.getProcessMemoryInfo. Ezen információ megszerzése érdekében egy másik eljárást: ActivityManager.getProcessMemoryInfo (int [])

Ez adja vissza az alacsony szintű MemoryInfo szerkezet összes adatot:

De a különbség PSS. PrivateDirty és SharedDirty. Nos, most kezdődik a móka.

A legtöbb memória Android (és Linux alapú rendszerek általában) ténylegesen megoszlik több folyamat. Szóval, mennyi memóriát használ a folyamat, sőt, nem világos. Add a tetején, hogy a paging lemezre (nem beszélve a csere, hogy nem használja az Android), és még kevésbé világos.

Így, ha úgy döntesz, hogy elvegye a RAM fizikai valójában jelenik meg minden egyes folyamat, és hozzáadni a folyamatok, akkor valószínűleg végül kap a számok sokkal nagyobb, mint a tényleges RAM mennyisége.

PSS szoba - egy mutatót, amely kiszámítja a mag, amely lehetővé teszi a memória megosztás - főleg RAM minden oldalon a folyamatban skálázott számának aránya más folyamatok is használja ezt az oldalt. Így, akkor (elméletben), hogy adjunk PSS minden folyamat, hogy a RAM teljes, az általuk használt PSS és hasonlítsa össze a folyamatok közötti kap egy durva ötlet relatív súlyát.

Egy másik érdekes mutató itt PrivateDirty. amely lényegében egy RAM egy olyan folyamatban, nem lehet rakodni a lemezen (ez nem támogatja a ugyanazokat az adatokat a lemezen) nem használható bármely más folyamatok. Egy másik módja, hogy nézd meg, hogy - ez RAM, amely elérhető lesz a rendszer, amikor a folyamat megy (és valószínűleg fog fordulni gyorsan cache és egyéb az alkalmazás).

Ebből a célból, hogy az API SDK. Azonban megteheti, mint fejlesztő eszköz segítségével.

Ha csak azt, hogy a memória használat minden folyamat, akkor a ADB shell procrank. A kimenet az azonos rendszerben az alábbiak szerint:

PSS. mint láttuk korábban, és a USS Priv Dirty.

Érdekes megjegyezni: PSS és a USS bit (vagy egy kicsit több) különbözik attól, amit láttunk a meminfo. Miért van ez? Prokrank használ egy másik rendszermag gyűjtésére adataik mint meminfo. és egy pár különböző eredményeket. Miért van ez? Őszintén szólva, fogalmam sincs. Úgy vélem, hogy procrank pontosabb lehet. de valójában ez csak hagyja a lényeget: „Vedd semmilyen információt memóriát kapsz sóval, gyakran nagyon nagy szemű.”

Végül van egy parancs ADB shell cat / proc / meminfo amely egy rövid leírást ad a teljes memória használat a rendszerben. Van egy csomó adat, csak az első néhány számot, ami beszélni (és a többiek egyértelmű, hogy több ember, és a kérdéseimre a néhány embernek róluk gyakran vezet ellentmondásos magyarázatok):

MemTotal - a teljes rendelkezésre álló memória mennyisége a kernel és a felhasználói tér (gyakran kisebb, mint a tényleges fizikai memória eszközt, mert néhány szükséges memóriát a rádiót, a DMA puffereket stb .. D).

MemFree - a RAM mennyisége, amelyet nem használtak. A szám, amit itt látni, igen nagy; Általános szabály, hogy az Android rendszer lesz csak pár MB, mert igyekszünk használni a rendelkezésre álló memóriát a folyamat támogatására

Trolt - ez memóriát használja a cache file-rendszer, és egyéb ilyen dolgok. A tipikus rendszereknél 20 MB, vagy úgy, hogy ne essen a rossz állapotban lapozás; Slaughter Android gyilkos nem lett beállítva egy adott rendszerben, hogy megbizonyosodjon arról, hogy a háttér folyamatok elpusztulnak, mielőtt a cache memóriát foglalnak túl sok közülük vezet egy ilyen hívás.

Igen, akkor kap egy programmemória információt, és dönt arról, hogy nem intenzív munka memóriával.

Szerezd meg a VM kupacméret, hívja:

Szerezd meg a memóriát VM, hívja:

Szerezd meg a kupac mérethatár VM, hívja:

Befelé a memóriát hívja:

Csináltam egy alkalmazás viselkedésének meghatározása OutOfMemoryError és ellenőrzi a memória használat.

Ez egy folyamatban lévő munka, de nem értem:

Miért PID nem egyezik az eredmény activityManager.getProcessMemoryInfo ()? Nyilvánvaló, hogy azt szeretné, hogy az így kapott adatokat jelentősek voltak, amiért a Google úgy akadályozták korreláció az eredmények? A jelenlegi rendszer nem is működik, ha azt akarom, hogy kezelni az összes memória használat, mint a visszaadott eredmény objektumtömbbe android.os.Debug.MemoryInfo, de ezek egyike sem tárgyak nem tudom megmondani, mik azok a kapcsolódó pid. Ha csak át egy tömb minden pid, akkor nem lesz képes megérteni az eredményeket. Ahogy én látom, az, hogy az, hogy tárgytalanná teszi a átadása több pid egy időben, majd ha igen, miért van olyan ActivityManager.getProcessMemoryInfo () volt csak egy tömb int?

Hackbod évek - az egyik legjobb válaszok Veremtúlcsordulás. Ő fényt derít egy nagyon homályos téma. Ez sokat segített.

Statisztikák a folyamat, a szolgáltatás, hogy megtudja, hogyan az alkalmazás kezeli a memóriát, magyarázta egy blogbejegyzést. folyamat statisztika: megértése, hogyan alkalmazás RAM származó Dianne Hackborn:

1) Azt hiszem nem, vagy legalábbis nem a Java.
2)

Android Studio 0.8.10+ bemutatott egy hihetetlenül hasznos eszköz az úgynevezett Memory Monitor.

Ez jó:

  • Megjeleníti az elérhető és használt memória a menetrend az események és szemétgyűjtő idővel.
  • Rapid tesztelés alkalmazása lassúság tudható be, hogy a túlzott szemétgyűjtő eseményeket.
  • Gyorsteszt alkalmazásának hibák miatt lehet kevés a memória.

1. ábra kényszerítése események GC (garbage collection) az Android Memória Monitor

Ezzel, akkor kap egy csomó hasznos információt memóriafelhasználásának az alkalmazás valós időben.

Kapcsolódó cikkek