java - 如何检查数组是否可以分配java中请求的内存大小?

标签 java arrays memory out-of-memory

我正在用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/

相关文章:

java - 为什么在 Java 中会出现 ArrayStoreException?

java - TransformerFactory与Xalan依赖冲突

java 。读取文件,按某列排序并打印

python - 为什么python list slice赋值会吃内存?

python - 如何实现用于测试的内存密集型 python 脚本

java - 我可以通过它占用的内存量来限制 HashMap 吗?

java - 如何在使用字符串分词器读取分数时忽略括号?

javascript - 在 JavaScript 中填充数组

mysql - mysql的语法数组

c - 通过C中的预取和缓存优化对阵列的线性访问