java.lang.OutOfMemoryError:Java堆空间

问题描述 投票:0回答:1

我被困住了...事先,我当然检查了所有关于此问题的帖子@ stackoverflow / google等,但我还无法解决此问题。我正在使用IntelliJ作为编辑器。这些是我的vmoptions:

-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
.
.

取决于输入,它可以成倍增长...

java recursion heap heap-memory
1个回答
0
投票

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

请使用:

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

}
adaptedList.clear()

(Ps:如果必须在循环中对其进行初始化,可以调用垃圾收集器以防止OutOfMemory错误。)

© www.soinside.com 2019 - 2024. All rights reserved.