java - 线程中出现异常 "main"java.lang.OutOfMemoryError : Java heap space in eclipse

标签 java xls

您好,我正在从 .xls 工作表中读取数据,它包含 8500 行数据,我尝试将其存储在 double[][] 中 但我收到错误

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

代码

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;       
}

最佳答案

当前这一行:

doubleArray = new double[data1.size()][data2.size()];

正在创建 8500 x 8500 double ,超过 500MB。 您基本上为 8500 行和 8500 列分配了足够的空间。

但是看到您在算法中只使用了其中的 2 列:

doubleArray[i][0] = (Double)data1.get(i);
doubleArray[i][1] = (Double)data2.get(j);

我怀疑您是否真的想要创建那么多列。 考虑到您剩余的算法,此分配应该可以满足您的需求:

doubleArray = new double[data1.size()][2];

关于java - 线程中出现异常 "main"java.lang.OutOfMemoryError : Java heap space in eclipse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31691661/

相关文章:

java - 在 Java 中使用 Aspose 单元动态创建工作表?

python - 从单元格中检索完整的富文本数据(单元格内有多种字体颜色/样式)

java - 通过二分搜索查找数组中的位置时遇到问题

Java:埃拉托斯特尼筛法:数组作为参数

java - 有没有办法在 S3 中连续写入流(逐行)

python : open csv files from a list and convert them into xls

java - 如何使用 XLS 转换复制 XML 节点并粘贴到同一级别

java - 如何解析xls文件? (已知语言: Python, Java、Lua)

java - 轻量级 JMS 代理

java - 找到三元组中间值的最快方法?