嗨,我正在从工作.xls表中读取包含8500数据行的数据,我正在尝试将其存储double[][]但我收到错误
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
Run Code Online (Sandbox Code Playgroud)
码
public static double[][] getData_DoubleArray(String path, int sheetNo, int rowIndex1, int rowIndex2) {
double[][] doubleArray=null;
try {
HSSFSheet sheet = PS_ExcelReader.getWorkSheet(path,sheetNo);
System.out.println("sheet" + sheet);
List<Object> data1 = PS_ExcelReader.getFullColumnByIndex(sheet, rowIndex1);
List<Object> data2 = PS_ExcelReader.getFullColumnByIndex(sheet, rowIndex2);
doubleArray = new double[data1.size()][data2.size()];
for(int i = 0; i < data1.size(); i++) {
for(int j = 0; j < data2.size(); j++) {
doubleArray[i][0] = (Double)data1.get(i);
doubleArray[i][1] = (Double)data2.get(j);
}
}
System.out.println("array " + Arrays.deepToString(doubleArray));
}
catch(IOException ioe) {
log.error("data mis match");
}
return doubleArray;
}
Run Code Online (Sandbox Code Playgroud)
目前这一行:
doubleArray = new double[data1.size()][data2.size()];
Run Code Online (Sandbox Code Playgroud)
正在创造8500 x 8500双打,超过500MB.你基本上分配的空间足够8500和8500列.
但是看到你在算法中只使用了其中两列:
doubleArray[i][0] = (Double)data1.get(i);
doubleArray[i][1] = (Double)data2.get(j);
Run Code Online (Sandbox Code Playgroud)
我怀疑你真的想要创建那么多列.鉴于您的剩余算法,此分配应满足您的需求:
doubleArray = new double[data1.size()][2];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1352 次 |
| 最近记录: |