私の Android アプリでは、大きな int 配列を割り当てています。これにより、十分なメモリがあるはずだと思われるときに、OutOfMemory エラーが発生することがあります。これは私が得るものの例です:
// always this value
ActivityManager.some_instance.getMemoryClass() = 128 Mb
// always this value
Runtime.getRuntime().maxMemory()/(1024*1024) = 128 Mb
// example value
Runtime.getRuntime().freeMemory()/(1024*1024) = 81 Mb
// example value, can also be bigger than freeMemory()
arrayLengthToAllocate*4/(1024*1024) = 47 Mb
明確にするために、最後の値が freeMemory() より大きいか小さい状況で OutOfMemory エラーが発生します。
エラーが発生するのはなぜですか? 割り当て時にヒープサイズが増えていませんか? 割り当てを試みる直前のアプリのメモリ使用量は約 8 MB であるため、問題になることはありません。
PS。このアプリが行っていることの int[] を使用する以外のアプローチは不可能です。