【发布时间】:2016-08-05 20:02:16
【问题描述】:
我正在尝试使用此代码在 Java 中生成 List 的笛卡尔积:
private static List<List<String>> getCartesian(List<List<String>> initialList) {
List<List<String>> result = new ArrayList<List<String>>();
result.add(new ArrayList<String>());
for (List<String> first : initialList) {
List<List<String>> temporaryList = new ArrayList<List<String>>();
for (List<String> second : result) {
for (String word : first) {
List<String> tmp2 = new ArrayList<String>(second);
tmp2.add(word);
temporaryList.add(tmp2);
}
}
result = temporaryList;
}
return result;
}
我在使用大型列表时收到以下错误:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
我该怎么做才能让它在大数据上发挥作用?
【问题讨论】:
-
查看 JVM 选项 -Xmx。
-
您是否需要同时在内存中保存所有这些列表?制作完成后,您打算如何处理产品?
-
使用命令行选项 -Xmx 运行 Java,该选项设置堆的最大大小。我认为默认值为 512M,因此请注意:您为此功能使用了大量内存...
-
我尝试增加 JVM 堆大小,但没有结果。对于每个这些笛卡尔我做这个:
java.util.List<java.util.List<String>> allCombinations=cartesianProduct(subsequence1); int [] scoreList=new int[allCombinations.size()]; for(int i=0;i<allCombinations.size();i++) scoreList[i]= getScore(allCombinations.get(i));我怎样才能修改这个方法来只得到这个scoreList。
标签: java list out-of-memory cartesian-product