java - 异常 java.lang.OutOfMemoryError : Java heap space occurs in recursion

标签 java recursion heap-memory

我使用 IntelliJ 作为编辑器。 这些是我的虚拟机选项:

-Xms1024m

-Xmx4096m

-XX:MaxPermSize=700m

-XX:ReservedCodeCacheSize=480m

-XX:SoftRefLRUPolicyMSPerMB=50

我还可以在设置中更改任何其他内容以使其适合我吗?

我的算法尝试通过 Branch&Bound 计算矩阵链乘法问题,在这部分(下面的代码)中,我正在执行深度搜索/创建后继等。我假设此递归触发了堆问题。

 public  static  SimpleMCPNode createTree(SimpleMCPNode currentNode) {
//other statements 
.
.
.
.
for (int i = 0; i < currentNode.matrices.size() - 1; i++) {
        List<MatrixInfo> adaptedList = new ArrayList(currentNode.matrices);
        currentNode.successors.add(createTree(currentNode.createSuccessor(adaptedList, i)));
    }
//other statements
.
.

根据输入,它可以呈指数增长......

最佳答案

您不必每次都初始化新的数组列表。

请使用:

ArrayList<MatrixInfo> adaptedList = new ArrayList<MatrixInfo>();
for(int i=0; i< 10; i++){
  currentNode.successors.add(createTree(currentNode.createSuccessor(adaptedList,i)));
  adaptedList.clear() 
}

关于java - 异常 java.lang.OutOfMemoryError : Java heap space occurs in recursion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60520633/

相关文章:

javascript - Eloquent JS 第 5 章中的这段代码做了什么?

javascript - 红黑树 - JavaScript 中的删除方法

android - 在 Android 中执行 Dalvik 堆限制时是否计算共享内存?

java - 是否可以扩展类的实例

java - 贾斯珀报告 5.6 : Could not load the following font

javascript - 使用递归函数按顺序进行多个ajax请求,并在所有请求完成后执行回调函数

c - 使用堆内存调试c

Java FutureTask - 多线程调用 get()

java - 在 Tomcat 中部署 Web 应用程序

data-structures - 使用什么数据结构来实现动态内存分配堆?