我编写了 Android 应用程序,它有一些奇怪的内存不足异常问题,随机出现。是的,我知道 OOM 异常的问题通常是因为图像,我尽我所能来避免这个问题。我想找到消耗内存的地方的唯一方法是将日志与有关内存的信息放在任何地方。但我真的很困惑我需要哪些值。
我使用了下一个值:
- Runtime.getRuntime().maxMemory()
- Runtime.getRuntime().freeMemory()
- Runtime.getRuntime().totalMemory()
- Debug.getNativeHeapAllocatedSize()
- Debug.getNativeHeapFreeSize()
- Debug.getNativeHeapSize()
在 OOM 异常之前,我有下一个值:
- 最大内存:57344K
- 空闲内存:9581K
- 总内存:22407K
- NativeHeapAllocatedSize:34853K
- NativeHeapFreeSize:302K
- NativeHeapSize:40060K
- 低内存错误
在这个问题Android Bitmap Limit - Preventing java.lang.OutOfMemory我看到在这个博客中使用了 compeering ((reqsize + Debug.getNativeHeapAllocatedSize() + heapPad) >= Runtime.getRuntime().maxMemory()) ant一些奇怪的信息:
Debug.getNativeHeapFreeSize(); 空闲大小是堆中由于碎片或配置而未使用的内存量。
如果(totalMemory:22407K)远小于(maxMemory:57344K),我也无法理解为什么会出现OOM异常。
请帮助我了解如何使用此值。