我认为检查Runtime.getRuntime().freeMemory()
会做到这一点,但以下测试似乎表明它没有用:
List<Byte> listDebug = new ArrayList<Byte>();
Log.d("Free memory", String.format("%1$.2f", (float)Runtime.getRuntime().freeMemory()/(1024*1024)));
for (int i = 0; i < 100; i++) {
try {
listDebug.addAll(Arrays.asList(new Byte[1024 * 100]));
Log.d("Free memory", i + ":" + String.format("%1$.2f", (float)Runtime.getRuntime().freeMemory()/(1024*1024)));
} catch (Exception ex) {
Log.d("Free memory", ex.getMessage());
}
catch (Error e)
{
Log.d("Free memory", e.getMessage());
}
}
输出如下:
03-09 03:16:11.267: D/Free memory(3860): 1.30
03-09 03:16:11.277: D/Free memory(3860): 0:1.25
03-09 03:16:11.287: D/Free memory(3860): 1:2.63
03-09 03:16:11.298: D/Free memory(3860): 2:3.86
03-09 03:16:11.298: D/Free memory(3860): 3:3.08
03-09 03:16:11.317: D/Free memory(3860): 4:4.85
03-09 03:16:11.317: D/Free memory(3860): 5:4.06
03-09 03:16:11.317: D/Free memory(3860): 6:3.28
03-09 03:16:11.367: D/Free memory(3860): 7:7.84
03-09 03:16:11.367: D/Free memory(3860): 8:7.06
03-09 03:16:11.367: D/Free memory(3860): 9:6.27
03-09 03:16:11.387: D/Free memory(3860): 10:7.84
freeMemory()
测试应用程序在返回最高数字时在扩展列表 11 次后崩溃。我深感不解。我的测试代码是否存在根本缺陷或freeMemory()
完全无关java.lang.OutOfMemoryError
?