首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.lang.OutOfMemoryError: Java 8的java堆空间

java.lang.OutOfMemoryError: Java 8的java堆空间
EN

Stack Overflow用户
提问于 2015-04-28 17:52:02
回答 2查看 1.6K关注 0票数 1

当我得到这个错误时,我使用Java 8(在Eclipse中):

代码语言:javascript
复制
java.lang.OutOfMemoryError: Java heap space

我已经尝试过-Xmx命令,但是即使更改MetaspaceSize也无法解决它。当我试图交换list的元素(它是size<= 395)时,就会出现这个问题。

代码语言:javascript
复制
public void permutation(double[] arr, int pos, ArrayList<double[]> list) {
    if (arr.length - pos == 1)
        list.add(arr.clone());
    else
        for (int i = pos; i < arr.length; i++) {
            swap(arr, pos, i);
            permutation(arr, pos + 1, list);
            swap(arr, pos, i);
        }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-29 11:12:10

而不是构建每一个可能的组合的列表将使用大量的内存,当探索组合时,结果的数量可以随您输入的元素的数量呈指数增长。

一个简单的方法,它提供了一个调用,以处理每一个组合的发生。这将使工作量保持不变,但内存消耗从O(x^n)下降到O(1)。

代码语言:javascript
复制
public void permutation(double[] arr, int pos, Consumer<double[]> consumer) {
    if (arr.length - pos == 1)
        consumer.accept(arr);
    else
        for (int i = pos; i < arr.length; i++) {
            swap(arr, pos, i);
            permutation(arr, pos + 1, list);
            swap(arr, pos, i);
        }
}

注意:您可以创建一个将克隆添加到列表中的使用者,但也可以打印或处理结果。

票数 1
EN

Stack Overflow用户

发布于 2015-04-28 18:08:44

改变您正在分配的堆空间的数量不会解决这个问题。

您的堆正被消耗殆尽,因为您正在创建数量惊人的对象,并查看您想要实现的目标,这很可能是代码中的一个错误。

您需要调试应用程序,以确定在何处创建了所有对象,以及垃圾收集器为什么不能清除它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29926528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档