我使用 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/