Android: как проверить, сколько памяти осталось?
Ниже приведена моя формула, чтобы проверить, сколько осталось памяти (не сколько памяти осталось в текущей куче, но сколько еще памяти может быть использовано до сбоя приложения). Я не отдаленно уверен, что это правильно, не так ли?
double max = Runtime.getRuntime().maxMemory(); //the maximum memory the app can use
double heapSize = Runtime.getRuntime().totalMemory(); //current heap size
double heapRemaining = Runtime.getRuntime().freeMemory(); //amount available in heap
double nativeUsage = Debug.getNativeHeapAllocatedSize(); //is this right? I only want to account for native memory that my app is being "charged" for. Is this the proper way to account for that?
//heapSize - heapRemaining = heapUsed + nativeUsage = totalUsage
double remaining = max - (heapSize - heapRemaininng + nativeUsage);
Ответы
Ответ 1
Попробуйте использовать следующий код. это должно дать вам результаты, которые вам нужны (особенно поле Pss). Вы можете прочитать об этом здесь
Debug.MemoryInfo memoryInfo = new Debug.MemoryInfo();
Debug.getMemoryInfo(memoryInfo);
String memMessage = String.format(
"Memory: Pss=%.2f MB, Private=%.2f MB, Shared=%.2f MB",
memoryInfo.getTotalPss() / 1024.0,
memoryInfo.getTotalPrivateDirty() / 1024.0,
memoryInfo.getTotalSharedDirty() / 1024.0);
Ответ 2
Это старый поток, но это работает:
Runtime.getRuntime().gc();
long memoryAvailable = (Runtime.getRuntime().maxMemory() -
Runtime.getRuntime().totalMemory() +
Runtime.getRuntime().freeMemory());
totalMemory-freeMemory
- текущая используемая память.
Итак, это сводится к:
(maximum possible memory)-(current used memory)
Изменить для добавления: freeMemory не подсчитывает доступную память для сбора мусора, поэтому вы можете попробовать Runtime.getRuntime(). gc(), хотя понимаете, что могут иметь свои собственные последствия (например, визуальные икоты, если они запускаются в потоке пользовательского интерфейса).