我被困住了...事先,我当然检查了所有关于此问题的帖子@ 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
.
.
取决于输入,它可以成倍增长...
您不必每次都初始化一个新的数组列表。
请使用:
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错误。)