我正在用java编写代码,其中整数类型变量m从用户接收其值,并且该值用于将内存(以指数方式)分配给数组。
例如:
int m=29;
int [] c = new int [(int)pow(2,m)];
我的问题是 在实际分配发生之前,如何检查是否可以根据上述代码分配内存,并向用户抛出异常,以防由于以下原因而无法分配内存:
java.lang.OutOfMemoryError: Java heap space
或由于
java.lang.OutOfMemoryError: Requested array size exceeds VM limit
我还想知道如何克服程序内内存需求呈指数变化(例如2^m)的内存限制。
最佳答案
我认为您正在寻找的答案是Runtime.freeMemory()
- http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#freeMemory()
在某些情况下,这可能有助于将您的解决方案扩展到可用内存。然而,在实践中,您仍然希望将内存调用包装在 try-catch 中,例如:
int m=29;
int [] c = null;
try {
c = new int [(int)pow(2,m)];
} catch(OutOfMemoryError e) {
//Try with less memory?
//Other error handling?
}
关于java - 如何检查数组是否可以分配java中请求的内存大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33354890/