ПредишенСледващото

Моля, имайте предвид, че използването на памет в съвременните операционни системи, като например Linux, е изключително сложна и трудна за да прочистят района. В действителност, шансовете са, че наистина се тълкуват правилно всички номера, които получавате много ниска. (Почти всеки път, когато погледнете номера памет за използване с други инженери, винаги има дълъг разговор за това, което наистина означава, че води само до неясни заключения.)

Забележка. Сега имаме много по-обширна документация управление на паметта на вашата кандидатура, която обхваща по-голямата част от материала тук и по-модерен със състоянието на Android.

На първо място, може би, прочетете последната част на тази статия, която се обсъжда как да се управлява паметта на Android:

Намира се на по-ниско ниво, можете да използвате за отстраняване на грешки API за получаване на първоначална информация за нивото на памет в ядрото: android.os.Debug.MemoryInfo

Имайте предвид, че като се започне с версия 2.0, има API, ActivityManager.getProcessMemoryInfo. за да се получи тази информация за друг процес: ActivityManager.getProcessMemoryInfo (междинно съединение [])

Тя връща MemoryInfo структурата на ниско ниво с всички тези данни:

Но тъй като за разликата между Пс. PrivateDirty и SharedDirty. Е, сега веселбата започва.

Повечето от паметта в Android (и Linux-базирани системи като цяло) е действително разпределени между няколко процеса. Така че, колко памет използва процес, всъщност, не е ясно. Добави в началото на това страниране на диска (да не говорим за обмен, че ние не използваме за Android), и това е още по-малко ясно.

По този начин, ако ви се налага да отнеме всички RAM физическото на, всъщност показва за всеки процес, и се добавят всички процеси, ще вероятно в крайна сметка се получи цифрите са много по-големи от действителния размер на RAM.

Пс стая - показател, който се изчислява на ядрото, което дава възможност за споделяне на памет - главно RAM всяка страница в мащаб съотношението процес на броя на други процеси, които също използват тази страница. По този начин, можете да (на теория), за да добавите PSS във всички процеси, за да видите общата сума на RAM, те използват PSS и сравни между процесите, за да получите обща представа за относителната им тежест.

Друг интересен показател тук е PrivateDirty. който е по същество RAM в процес, който не може да се разтоварва на диска (не се поддържа от същите данни на диск) не се използва с други процеси. Друг начин да го погледнете - това е RAM, която ще бъде на разположение на системата, когато процесът върви (и най-вероятно ще се превърне бързо в кеш и други на неговото прилагане).

За тази цел, той е API SDK. Въпреки това, можете да го направите като програмист да използвате устройството.

Ако просто искате да видите използването на паметта на всички процеси, можете да използвате ADB procrank на обвивката. Изходът на една и съща система, както следва:

Пс. както видяхме преди, и Uss Priv Dirty.

Интересно е да се отбележи тук: Пс и Uss малко (или малко повече), различен от това, което видяхме в meminfo. Защо е това? Prokrank използва различен механизъм на ядрото за събиране на данните им от meminfo. и осигурява няколко различни резултати. Защо е това? Честно казано, нямам представа. Аз вярвам, че procrank може да бъде по-точен. но в действителност той просто се оставят на мястото: "Вземете който и да е информация за паметта, която можете да получите със сол, често е много голям зърно."

И накрая, има команда за ADB черупки котка / ргос / meminfo който дава кратко описание на общото потребление на памет в системата. Има много данни, а само първите няколко числа, която е да се говори (и останалата част от тях са ясни до няколко човека, и моите въпроси за тези малко хора около тях често водят до противоречиви обяснения):

MemTotal - е общата сума на наличната памет на ядрото и потребителското пространство (често по-малко от действителното физическо устройство с памет, тъй като някои от паметта, необходима за радиото, буферите DMA и т.н. D ..).

MemFree - е размерът на RAM, че не се използва. Числото, което виждате тук, е много висока; Като правило, системата Android ще е само за няколко MB, защото ние се опитваме да използваме наличната памет за подпомагане на процеса

Кеширана - тази памет се използва за кеш на файловата система, както и други такива неща. За типичните системи изискват 20 MB, или така, за да се избегне, попадащи в лошо състояние пейджинг; убиец Slaughter Android не е конфигурирана за конкретна система, за да се уверите, че процесите на заден план са убити преди кеширана памет се консумира твърде много от тях, за да доведе до такава виртуална памет.

Да, можете да получите информация за програмата памет и да реши дали да се направи интензивна работа с паметта.

Вземете размера на купчина VM, като се обадите на:

Вземи заделената памет VM, обадете се на:

Вземи ограничението за размера на свободната памет VM, обадете се на:

Влез във заделената памет, като се обадите:

Направих заявка за определяне на OutOfMemoryError на поведение и наблюдение на използването на паметта.

Това е работа в прогрес, но аз не разбирам:

Защо PID не съвпада с резултата от activityManager.getProcessMemoryInfo ()? Очевидно е, че искате да направите на получените данни, получени са били значителни, защо Google е толкова затруднен корелация на резултатите? Сегашната система не работи дори и ако искам да се справят с всички използването на паметта, като се върна резултат е масив от обекти android.os.Debug.MemoryInfo, но нито един от тези обекти не е наистина да ви кажа, това, което те са свързани PID-ове. Ако просто минават масив с всички PID-ове, няма да сте в състояние да разберат резултатите. Както аз го разбирам, е да се използва, това обезсмисля прехвърлянето на повече от един идентификатор в даден момент, а след това, ако е така, защо го направи ActivityManager.getProcessMemoryInfo () взе само един набор от вътр?

Hackbod е - един от най-добрите отговори на Stack Overflow. Той хвърля светлина върху един много неясен въпрос. Той ми помогна много.

Статистика на процеса, услугата, за да разберете как работи с приложението за памет, е обяснено в своя блог. статистика на процесите: разбиране за това как вашата кандидатура използва RAM от Даян Hackborn:

1) Мисля, че не, поне не на Java.
2)

Android Studio 0.8.10+ представи изключително полезен инструмент, наречен Memory Monitor.

Това е добре за:

  • Показва достъпно и използваната памет в графика на събития и събиране на боклука във времето.
  • Rapid тестване на мудността на приложение може да се дължи на прекалено големи събития за събиране на боклук.
  • Бърз отказ за кандидатстване тестване може да се дължи на липсата на памет.

Фигура 1. Изтласкващи събития GC (смет) на монитора на Android Memory

С помощта на този, можете да получите много полезна информация за изразходването на памет от вашата кандидатура в реално време.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!